Настройка own_update в RBAC YII2
Настройка правила RBAC Yii2 для редактирования собственной новости пользователя. При этом администратор сможет редактировать все новости.
Как задать own_update_news для AccessControl
1) Создаем правило:
<?php namespace common\rbac; class AuthorRule extends \yii\rbac\Rule { public $name = 'isAuthor'; /** * @param string|integer $user ID пользователя. * @param Item $item роль или разрешение с которым это правило ассоциировано * @param array $params параметры, переданные в ManagerInterface::checkAccess(), например при вызове проверки * @return boolean a value indicating whether the rule permits the role or permission it is associated with. */ public function execute($user, $item, $params) { return isset($params['model']) ? $params['model']->user_id == $user : false; } } ?>
2) Добавляем правило в yii2-admin
3) Добавляем одноименное разрешение
4) Зададим наследования:
4.1) Роли ADMIN добавим update_news
4.2) Роли EDITOR добавим own_update_news
4.3) Разрешению own_update_news добавим update_news (чтобы в следующем шаге использовать update_news а не own_update_news)
5) Зададим в контроллере в behaviors:
это пример только для страницы update
'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['edit_news'], 'actions' => ['update'], 'roleParams' => function($rule) { return ['model' => News::findOne(Yii::$app->request->get('id'))]; } ], ], ],