подскажите пожалуйста решение проблемы с которой я столкнулся:
Есть таблица users, в ней есть поле role (значение может быть: user, administrator и тп.)
Я создал класс как в доках:
Код: Выделить всё
<?php
namespace common\rbac;
use yii;
use yii\rbac\Rule;
class UserGroupRule extends Rule
{
public $name = 'userGroup';
/**
* @param string|integer $user the user ID.
* @param Item $item the role or permission that this rule is associated with
* @param array $params parameters passed to 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)
{
if (!Yii::$app->user->isGuest) {
$group = Yii::$app->user->identity->role;
if ($item->name == $group) {
return true;
}
}
return false;
}
}
Ну и реализовал правила:
Код: Выделить всё
// Создать пост
$createPost = $auth->createPermission('createPost');
$createPost->description = 'Создать пост';
$auth->add($createPost);
// Редактировать пост
$updatePost = $auth->createPermission('updatePost');
$updatePost->description = 'Обновить пост';
$auth->add($updatePost);
// Правило Группы пользователей
$rule = new \common\rbac\UserGroupRule;
$auth->add($rule);
// Пользователь
$user = $auth->createRole('user');
$user->ruleName = $rule->name;
$auth->add($user);
// Администратор
$admin = $auth->createRole('administrator');
$admin->ruleName = $rule->name;
$auth->add($admin);
$auth->addChild($admin, $user);
$auth->addChild($user, $createPost);
$auth->addChild($user, $updatePost);
Теперь хочу проверить это дело:
Код: Выделить всё
if (\Yii::$app->user->can('user')) {
echo '<p>Есть права user</p>';
}
if (\Yii::$app->user->can('administrator')) {
echo '<p>Есть права administrator</p>';
}
if (\Yii::$app->user->can('createPost')) {
echo '<p>Есть права createPost</p>';
}
if (\Yii::$app->user->can('updatePost')) {
echo '<p>Есть права updatePost</p>';
}
Итак результат:
role = 'user' - пусто
role = 'administrator' - видим 1 запись Есть права administrator
Подскажите пожалуйста где я ошибся?