Я потратил много времени, чтобы понять, как работает правило yii rbac. Но я не могу заставить это работать. У меня есть таблицы в db
auth_item, auth_item_child, auth_assignment, auth_rule
A должен иметь контроллер RbacController yii docs, у меня есть класс AuthorRule
<?php namespace app\rbac; use yii\rbac\Rule; class AuthorRule extends Rule { public $name = 'isAuthor'; public function execute($user, $item, $params) { return isset($params['email']) ? $params['email']->author_id == $user : false; } }
Поэтому в конце у меня две роли – админ и автор. автор может создавать сообщения (в моем случае электронные письма, потому что таблица в db называется электронной почтой) и может (это подтверждается) обновлять собственные сообщения. admin может обновлять сообщения и делать все, что может сделать автор.
в контроллере, который обрабатывает модель электронной почты (таблица – электронная почта) У меня есть метод actionUpdate. Чтобы автор мог обновлять собственные сообщения (электронные письма), я написал этот код
if(Yii::$app->user->can('updatePost')){ $model = $this->findModel($id); if (!Yii::$app->user->can('updateOwnPost', ['email' => $model])) { throw new ForbiddenHttpException('Вы не администратор.'); } if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('update', [ 'model' => $model, ]); } }
Код AuthorRule – это
<?php namespace app\rbac; use yii\rbac\Rule; class AuthorRule extends Rule { public $name = 'isAuthor'; public function execute($user, $item, $params) { return isset($params['email']) ? $params['email']->author_id == $user : false; } }
Любая помощь ценится! благодаря