Yii2 RBAC проверяет разрешения без каждого действия в контроллере
Как я могу проверить разрешения в одном месте?
Я не хочу проверять каждую функцию по отдельности.
Мой контроллер RBAC.
Я хотел бы проверить разрешение для вошедшего пользователя для всех действий в контроллере. Теперь я должен использовать Yii::$app->user->can('...')
индивидуально для каждого действия в контроллере
$admin = $auth->createRole('Admin');
$moderator = $auth->createRole('Moderator');
$createPost=$auth->createPermission('createPost');
$updatePost=$auth->createPermission('updatePost');
$deletePost=$auth->createPermission('deletePost');
$createCategory=$auth->createPermission('createCategory');
$updateCategory=$auth->createPermission('updateCategory');
$deleteCategory=$auth->createPermission('deleteCategory');
$auth->add($admin);
$auth->add($moderator);
$auth->add($createPost);
$auth->add($updatePost);
$auth->add($deletePost);
$auth->add($createCategory);
$auth->add($updateCategory);
$auth->add($deleteCategory);
Здесь я назначаю роль с разрешениями, но я никогда не использую эти разрешения, потому что пишу вручную в поведении - >(как ваш пример)
Что такое цель, создание разрешений в RBAC, если это не сработает? Если я хотел бы добавить премиум пользователя. Я мог только добавить действие в контроллер, например actionPremium, и установить в поведении действия для премиум-пользователя.
Например
Action=>['premium'] роли=>['premiumUser']
И еще один вопрос. Как в поведении настроить сообщение об ошибке?
$auth->addChild($admin,$moderator);
$auth->addChild($admin,$createCategory);
$auth->addChild($admin,$updateCategory);
$auth->addChild($admin,$deleteCategory);
$auth->addChild($moderator, $createPost);
$auth->addChild($moderator, $updatePost);
$auth->addChild($moderator, $deletePost);
$auth->assign($admin,1);
$auth->assign($moderator,2);
1 ответ:
Вы можете назначить разрешение, разрешенное в контроллере для всех действий в поведениях
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'actions' => ['index','view'], // these action are accessible //only the yourRole1 and yourRole2 'allow' => true, 'roles' => ['yourRole1', 'yourRole2'], ], [ // all the action are accessible to superadmin, admin and manager 'allow' => true, 'roles' => ['superAdmin', 'admin', 'manager'], ], ], ], 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['post'], ], ], ]; }
Роль, которую вы назначили в поведении, предназначена для действия .. разрешить или запретить .. если роль имеет разрешенное действие в поведении, то он может выполнить в противном случае он получает разрешение отказано 403 .. (несанкционированный) ..
Вы также можете проверить роль в процедурном коде с помощью
if ( Yii::$app->User->can('admin') ){ ..... yourdCode .... }