Передача данных для правила RBAC через ACF

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
cold
Сообщения: 5
Зарегистрирован: 2015.03.05, 15:52

Передача данных для правила RBAC через ACF

Сообщение cold » 2016.09.30, 13:17

Разложу ситуацию на примере, описанном в официальной документации.
У нас есть разрешение "updateOwnPost", которое использует правило, принимающее во входных данных модель Post.
Проверить, разрешено ли пользователю редактировать пост мы можем следующим образом:
Yii::$app->user->can('updateOwnPost', ['post' => $post])
Вопрос в том, как описать данное ограничение для действия контроллера в AFC. Решил проблему таким образом:

Код: Выделить всё

class PostController extends Controller
{
    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'actions' => ['update'],
                        'allow' => true,
                        'matchCallback' => function ($rule, $action) {
                            $id = Yii::$app->request->get('id');
                            return Yii::$app->user->can('updateOwnPost', ['post' => Post::findOne($id)]);
                        }
                    ],
.......
}
Малость попахивает костылем, может есть возможность упростить решение?


Ответить