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

How to pass parameters to the rbac rule when using a permission name in yii\filter\AccesControl?

我想将控制器中的所有操作限制为具有特定权限的用户,在我的例子中 updatePost 归因于 author 角色取决于 AuthorRule。 控制器旨在将翻译器分配给 posts,而不是创建或更新 posts 本身。

该规则仅使用名称为 author_id 的参数验证用户是 post 的创建者,值是author_id post 的属性。到现在为止,这都是普通的东西。

我知道我可以检查

 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 的执行方法。

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

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

将此检查移至操作中,或者如果您确实知道值,请使用matchCallback,例如:

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