身份验证 – 基于Yii角色的访问,管理自己的帖子
发布时间:2020-12-13 17:12:23 所属栏目:PHP教程 来源:网络整理
导读:我用谷歌搜索,阅读教程,博客和实验很多.所以我能够定义基于角色的控制器动作访问. 一切正常. 我想问的是.如何编写规则来显示,编辑和删除用户自己的帖子? 默认情况下,它显示所有帖子.但是,我们可以将数据提供者标准显示为自己的帖子.但是我怎么能控制CRUD?
我用谷歌搜索,阅读教程,博客和实验很多.所以我能够定义基于角色的控制器动作访问.
一切正常. 我想问的是.如何编写规则来显示,编辑和删除用户自己的帖子? 默认情况下,它显示所有帖子.但是,我们可以将数据提供者标准显示为自己的帖子.但是我怎么能控制CRUD? public function accessRules() { return array( array('allow',// allow all users to perform 'index' and 'view' actions 'actions' => array('index','view'),'users' => array('*'),),array('allow',// allow authenticated user to perform 'create' and 'update' actions 'actions' => array('create','update'),'expression' => 'Yii::app()->controller->HaveAccess()',//'users' => array('@'),// allow admin user to perform 'admin' and 'delete' actions 'actions' => array('admin','delete'),array('deny',// deny all users 'users' => array('*'),); } 对于帖子显示: public function actionIndex() { $dataProvider = new CActiveDataProvider('Advertisment'); if (!$this->IsAdmin()) { $dataProvider = new CActiveDataProvider('Advertisment',array( 'criteria' => array( 'condition' => 'added_by='.$this->userId,'order' => 'id DESC','pagination' => array( 'pageSize' => 20,)); } $this->render('index',array( 'dataProvider' => $dataProvider,)); } 解决方法
要限制对用户自己的帖子的更新和删除操作,您必须检查控制器操作内的权限(这在控制器的accessRules afaik中是不可能的,因为当前不知道检查权限的帖子的ID对accessRules进行评估.)
例: public function actionUpdate($id){ $model = $this->loadModel($id); if($model->added_by === $this->userId){ // your code here }else throw new CHttpException(401,'You are not authorized to edit this post.'); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |