我试图在我的应用程序中使用带有Auth扩展的RBAC。我能够添加层次结构 这里扩展提供的GUI如下:
我现在要做的是将bizRule添加到updateOwnPost。 根据{{3}}我需要添加一些代码:
$auth=Yii::app()->authManager;
$auth->createOperation('createPost','create a post');
$auth->createOperation('readPost','read a post');
$auth->createOperation('updatePost','update a post');
$auth->createOperation('deletePost','delete a post');
$bizRule='return Yii::app()->user->id==$params["post"]->authID;';
$task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule);
$task->addChild('updatePost');
$role=$auth->createRole('reader');
$role->addChild('readPost');
$role=$auth->createRole('author');
$role->addChild('reader');
$role->addChild('createPost');
$role->addChild('updateOwnPost');
$role=$auth->createRole('editor');
$role->addChild('reader');
$role->addChild('updatePost');
$role=$auth->createRole('admin');
$role->addChild('editor');
$role->addChild('author');
$role->addChild('deletePost');
但我们可以看到此代码正在创建新的操作/任务/角色。我已经通过GUI添加了它们。 所以我现在需要的是放置类似的东西:
$bizRule='return Yii::app()->user->id==$params["post"]->authID;';
创建早期的updateOwnPost任务。
幸运的是,我的运气只针对这个话题:link m-nel说:
我需要的此问题已在分机的评论部分得到解答 页。阅读:link
和ofc评论是从空间中刷新的:)
有人可以回答我应该怎么做,为任务提供任务吗? 谢谢 ;) (抱歉4我的英文)
答案 0 :(得分:2)
这为任务添加了一个bizrule并为其添加了一个子(操作)。
$bizRule='return Yii::app()->user->id==$params["post"]->authID;'; // here goes the bizrule
$task=$auth->createTask('updateOwnPost','update a post by author himself',$bizRule); // here we create a task and attach the bizrule
$task->addChild('updatePost'); // here we attach the operation to it
因此,您需要对代码进行测试以执行访问检查,例如:
$params=array('post'=>$this->loadPost($id));
if(Yii::app()->user->checkAccess('updateOwnPost',$params))
{
// update post
}
您可以将此代码段添加到过滤器或操作内部执行检查。 我认为进行小型检查以确保用户可以编辑帖子会更容易。首先检查用户是否是作者,然后检查他是否可以编辑该帖子。过滤器有点复杂。