在yii \ filter \ AccesControl中使用权限名称时如何将参数传递给rbac规则?

时间:2017-01-03 08:15:21

标签: yii rbac

我想将控制器中的所有操作限制为具有特定权限的用户,在我的情况下 updatePost 将归因于 author rôle,具体取决于< EM> AuthorRule 。 控制器旨在将翻译人员分配到帖子,而不是自己创建或更新帖子。

规则仅使用名称为 author_id 的param验证用户是帖子的创建者,value是帖子的 author_id 属性的值。到目前为止,所有这些都很常见。

我知道我可以查看

 Yii::$app->user->can('updatePost', ['author_id' => <a value>]) 

每个动作的结果都是函数。不过,我在Yii的指南中读到,授权名称(updatePost)也可以在这样的行为中给出:

return [
    'access' => [
        'class' => AccessControl::className(),
        'rules' => [
            [
                'allow' => true,
                'actions' => ['index','create', 'view', 'update'],
                'roles' => ['updatePost'],
            ],

在这种情况下,将调用AuthorRule的execute方法。

我的问题是:“在这种情况下,将author_id传递给AuthorRule的执行函数的确切语法是什么?”

1 个答案:

答案 0 :(得分:0)

你无法传递这样的参数。我猜它没有为参数做好准备,因为通常你不知道这一步中的确切值(这些通常作为参数传递给动作)。

将此检查移至操作中,或者确实值使用matchCallback,如下所示:

'matchCallback' => function ($rule, $action) {
    return Yii::$app->user->can('updatePost', ['author_id' => <a value>]);
}