Настройка own_update в 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'))];
                        }
                    ],
                ],
            ],

 

Обратная связь