我想将控制器中的所有操作限制为具有特定权限的用户,在我的情况下 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的执行函数的确切语法是什么?”
答案 0 :(得分:0)
你无法传递这样的参数。我猜它没有为参数做好准备,因为通常你不知道这一步中的确切值(这些通常作为参数传递给动作)。
将此检查移至操作中,或者确实值使用matchCallback
,如下所示:
'matchCallback' => function ($rule, $action) {
return Yii::$app->user->can('updatePost', ['author_id' => <a value>]);
}