如何在 yiifilterAccesControl 中使用权限名称时将参数传递给 rbac 规则



我想将控制器中的所有操作限制为具有特定权限的用户,在我的例子中,updatePost根据作者规则归因于作者rôle。控制者旨在为帖子分配翻译人员,而不是创建或更新帖子本身。

该规则仅使用名称为 author_id 且 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'],
            ],

在这种情况下,将调用作者规则的执行方法。

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

你不能传递这样的参数。我想它没有为参数做好准备,因为通常您不知道此步骤中的确切值(这些值通常作为参数传递给操作)。

将此检查移动到操作中,或者如果您知道该值,请使用如下matchCallback

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

最新更新