Yii2 RBAC:应将哪些检查纳入规则

时间:2015-06-24 16:49:41

标签: php yii2 rbac

假设有一个论坛有两种用户(管理员和用户),管理员可以关闭一个帖子。在某些页面上,我需要绘制一个按钮来关闭一个帖子。

如果我根据http://www.yiiframework.com/doc-2.0/guide-security-authorization.html在RBAC中对此进行建模,我必须创建角色" adminRole"和" userRole"和权限" closeThread"并将该权限附加到" adminRole"角色。但没有人可以关闭已经关闭的线程。是否应该将这样的支票放入分配给" closeThread"是否允许或被保留在RBAC特定类之外?

变体1.该检查附加于" closeThread"权限:

// Definition of the rule attached to "closeThread" permission:
class CloseThreadRule extends \yii\rbac\Rule
{
    public function execute($user, $item, $params)
    {
        return $params['thread']->is_closed == false;
    }
}

// $thread - is an instance of a class representing thread data
if(\yii::$app->user->can('closeThread', ['thread' => $thread]))
    /* show "Close Thread" button */;

变体2.检查不在RBAC类之内:

if($thread->is_closed == false && \yii::$app->user->can('closeThread'))
    /* show "Close Thread" button */;

根据RBAC方法,哪个是正确的方法(变体1或变体2)?

0 个答案:

没有答案