在 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>]);
}
我想将控制器中的所有操作限制为具有特定权限的用户,在我的例子中 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>]);
}