Closed frendays closed 4 years ago
Роль привязана к пользователю?
да
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
//здесь проблема
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 тоже пробовал...
}
}
Кажется я понял что вам нужно. Вам нужно что бы роли наследовались? https://github.com/Dominus77/yii2-advanced-start/blob/61c3093499328a132afe27aa5434db144c917cb6/modules/rbac/console/InitController.php#L54 Для этих целей вам надо раскомментировать данную строку и выполнить повторную инициализацию RBAC
php yii rbac/init
В текущем варианте, роли не наследуются, им присваиваются только разрешения и чем выше роль тем больше разрешений, то есть супер администратор, получает все разрешения.
При выполнении выше рекомендаций, мы получаем следующую структуру наследования ролей
Да всё верно !
У меня роль 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 в иерархии выше чем одмин ?