yii-auth:我应该在哪里添加bizrule到新任务?

时间:2013-11-22 16:04:47

标签: php yii yii-extensions rbac

我试图在我的应用程序中使用带有Auth扩展的RBAC。我能够添加层次结构 这里扩展提供的GUI如下: enter image description here

我现在要做的是将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我的英文)

1 个答案:

答案 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
}

您可以将此代码段添加到过滤器或操作内部执行检查。 我认为进行小型检查以确保用户可以编辑帖子会更容易。首先检查用户是否是作者,然后检查他是否可以编辑该帖子。过滤器有点复杂。