rbac
frendays opened this issue · comments
Роль привязана к пользователю?
RBAC строится на основе разрешений, к каждой роли добавляются разрешения, то есть роль это группа разрешений. И у вас синтаксическая ошибка Yii::$app->->can
синтаксическая ошибка случайно в комментарии допустил в коде норм ! Вы хотите сказать нельзя проверить роль admin ?
Почему же нельзя, проверить можно все и роли и разрешения
Ну я хочу проверить если админ дать доступ ! если super_admin то он тоже должен получить доступ т.к. он выше в иерархии . p.s ,tp разрешений (Permission)
Как это сделать ?
if (Yii::$app->authManager->checkAccess(Yii::$app->user->id, Role::ROLE_ADMIN)) {
||
if (Yii::$app->user->can(Role::ROLE_ADMIN)) {
аналогично проверка остальных ролей и разрешений
if(Yii::$app->user->can(modules\rbac\models\Role::ROLE_SUPER_ADMIN) || Yii::$app->user->can(modules\rbac\models\Role::ROLE_ADMIN)) { echo 'Доступ разрешен'; }
у меня с разрешением началась проблема потом я к роли перешел ! роль можно опустить ! но вот с разрешение беда не пойму в AuthorRule.php возвращаю всегда true он не проверяет условие проект ваш давно скачивал но всё работало вроде перешел на новое php7.4.4 mysql 8 но может не из этого проблема пример ниже
use modules\rbac\models\Permission;
use modules\rbac\models\Role;
Yii::$app->authManager->invalidateCache();
$var = Yii::$app->authManager->getRolesByUser(Yii::$app->user->id);
echo "
";";
print_r($var);
echo "
if(Yii::$app->user->can('super_admin')){
echo 'super_admin ok
';
}else{
echo 'super_admin no
';
}
//здесь проблема
if(Yii::$app->user->can(Permission::PERMISSION_UPDATE_OWN_POST, ['post' => $profile])){
echo 'PERMISSION_UPDATE_OWN_POST ok
';
}else{
echo 'PERMISSION_UPDATE_OWN_POST no
';
}
**_`
\modules\rbac\components\AuthorRule.php
`_**
class AuthorRule extends Rule
{
public $name = 'isAuthor';
public function execute($user, $item, $params)
{
return true; // для теста 1 тоже пробовал...
}
}
Кажется я понял что вам нужно. Вам нужно что бы роли наследовались?
Для этих целей вам надо раскомментировать данную строку и выполнить повторную инициализацию RBAC
php yii rbac/init
В текущем варианте, роли не наследуются, им присваиваются только разрешения и чем выше роль тем больше разрешений, то есть супер администратор, получает все разрешения.
При выполнении выше рекомендаций, мы получаем следующую структуру наследования ролей
Да всё верно !