Dominus77 / yii2-advanced-start

Yii2 Start Project Advanced Template
https://dominus77.github.io/yii2-advanced-start/
MIT License
23 stars 12 forks source link

rbac #30

Closed frendays closed 4 years ago

frendays commented 4 years ago

У меня роль 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 в иерархии выше чем одмин ? изображение

Dominus77 commented 4 years ago

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

frendays commented 4 years ago

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

Dominus77 commented 4 years ago

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

Dominus77 commented 4 years ago

Снимок экрана от 2020-03-18 11-32-32

frendays commented 4 years ago

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

Dominus77 commented 4 years ago

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

frendays commented 4 years ago

Ну я хочу проверить если админ дать доступ ! если 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)) {

Dominus77 commented 4 years ago

Снимок экрана от 2020-03-18 11-45-15 Снимок экрана от 2020-03-18 11-45-30

Dominus77 commented 4 years ago

аналогично проверка остальных ролей и разрешений

Dominus77 commented 4 years ago

if(Yii::$app->user->can(modules\rbac\models\Role::ROLE_SUPER_ADMIN) || Yii::$app->user->can(modules\rbac\models\Role::ROLE_ADMIN)) { echo 'Доступ разрешен'; }

frendays commented 4 years ago

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

}

}

изображение

Dominus77 commented 4 years ago

Кажется я понял что вам нужно. Вам нужно что бы роли наследовались? https://github.com/Dominus77/yii2-advanced-start/blob/61c3093499328a132afe27aa5434db144c917cb6/modules/rbac/console/InitController.php#L54 Для этих целей вам надо раскомментировать данную строку и выполнить повторную инициализацию RBAC

php yii rbac/init

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

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

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

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

frendays commented 4 years ago

Да всё верно !