Dominus77 / yii2-advanced-start

Yii2 Start Project Advanced Template

Home Page:https://dominus77.github.io/yii2-advanced-start/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rbac

frendays opened this issue · comments

commented

У меня роль super_admin не могу получить к админу почему ?

use modules\rbac\models\Role;
if (Yii::$app->can(Role::ROLE_ADMIN)) {

}

получаю если явно задать
use modules\rbac\models\Role;
if (Yii::$app->can(Role::ROLE_SUPER_ADMIN)) {

}

но super_admin в иерархии выше чем одмин ?
изображение

Роль привязана к пользователю?

commented

изображение
да

RBAC строится на основе разрешений, к каждой роли добавляются разрешения, то есть роль это группа разрешений. И у вас синтаксическая ошибка Yii::$app->->can

commented

синтаксическая ошибка случайно в комментарии допустил в коде норм ! Вы хотите сказать нельзя проверить роль admin ?

Почему же нельзя, проверить можно все и роли и разрешения

commented

Ну я хочу проверить если админ дать доступ ! если 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 'Доступ разрешен'; }

commented

у меня с разрешением началась проблема потом я к роли перешел ! роль можно опустить ! но вот с разрешение беда не пойму в 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 тоже пробовал...

}

}

изображение

Кажется я понял что вам нужно. Вам нужно что бы роли наследовались?

//$this->processAddChildRoles($auth, $roles); // Inheritance of roles - If you uncomment, the roles are inherited

Для этих целей вам надо раскомментировать данную строку и выполнить повторную инициализацию RBAC

php yii rbac/init

В текущем варианте, роли не наследуются, им присваиваются только разрешения и чем выше роль тем больше разрешений, то есть супер администратор, получает все разрешения.

Снимок экрана от 2020-03-19 08-01-17

При выполнении выше рекомендаций, мы получаем следующую структуру наследования ролей

Снимок экрана от 2020-03-19 08-04-47

commented

Да всё верно !