Страница 1 из 3
Yii2 авторизация и Роли
Добавлено: 2014.04.26, 02:52
savenko
Здравствуйте!
Не могу понять как работает RBAC.
Пожалуйста, не нужно указывать ссылки на английскую инструкцию в качесве ответа.
В конфиге указал
Код: Выделить всё
'authManager' => [
'class' => 'yii\rbac\PhpManager',
'authFile' => '@app/config/rbac.php'
],
В rbac.php написал
Код: Выделить всё
<?php
return array (
'items' =>array(
'admin'=>array (
'type'=>1,
'name'=>'admin',
'ruleName' => 'admin'
)
)
);
Вопрос как после авторизации пользователю назначить права админа? Не работает Yii::$app->user->can('admin'), пишет Rule not found: admin
+ не работет если в контроллере указываю роль пользователя 'admin'
Код: Выделить всё
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['login', 'error'],
'allow' => true,
],
[
'actions' => ['logout', 'index','clearchache'],
'allow' => true,
'roles' => ['admin'],
],
],
],
];
}
Re: Yii2 авторизация и Роли
Добавлено: 2014.04.26, 03:12
lancedevnull
Код: Выделить всё
/**
* @var string name of the rule associated with this item
*/
public $ruleName;
это нужно, если вы создаете свой класс MyRule extends Rule, т.е. вам оно не нужно, если хотите расшифровать, то юзайте
Код: Выделить всё
/**
* @var string the item description
*/
public $description;
(c) yiisoft/yii2/rbac/Item.php
Re: Yii2 авторизация и Роли
Добавлено: 2014.04.26, 03:17
savenko
По шагам, пожалуйста:
1) Описание ролей (Админы и пользователи)
2) Привязка ролей к пользователям после авторизации (В бд есть запись у кого какая роль "admin", "user")
3) Проверка пользователя (Ты админ? Ты пользователь?)
Re: Yii2 авторизация и Роли
Добавлено: 2014.04.26, 10:56
vova07
Проверка у вас не работает, так как вы не сделали привязку.
1) Нужно описать в
конфиге RBAC компонент. (Вы это сделали)
2) Нужно создать файл
"rbac.php" и описать там все роли. (Вы это сделали)
3) Нужно создать
правило для гостя.
4) Если используете свои правила, то для них нужно указывать
"name" параметр.
5) Нужно сделать привязку пользователя к роли. Это лучше всего делать в момент регистрации нового пользователя, как только он был успешно добавлен в базу. Из доков:
Код: Выделить всё
public static function create($attributes)
{
/** @var User $user */
$user = new static();
$user->setAttributes($attributes);
$user->setPassword($attributes['password']);
$user->generateAuthKey();
if ($user->save()) {
// Вот тут происходит сама привязка:
$auth = Yii::$app->authManager;
$adminRole = $auth->getRole('author');
$auth->assign($adminRole, $user->getId());
return $user;
} else {
return null;
}
}
6) Можно смело использовать роли и проверки прав доступа в соём коде.
Re: Yii2 авторизация и Роли
Добавлено: 2014.04.26, 12:55
savenko
Большое спасибо за подробный ответ!
Последнее: как лучше всего добавить правило к пользователю?
Пока не сделал
Код: Выделить всё
$rule = new AdminRule();
$auth->add($rule);
то код не хотел работать.
P.S. Не понимаю смысла.
В $auth->assign($adminRole, 1);
Уже указано что пользователь с id 1-это Админ.
Зачем указывать еще правило в котором в методе execute я пишу
return \Yii::$app->user->id==$user;
Переписывается файл rbac.php на сервере (Получается запутаным), если со временем необходимо будет дописать роли то вполне вероятно что файл перепишется и все роли потрутся. + если есть 2 версии сайта (Для отладки и боевой), то просто так файл уже будет не синхронизировать(((
Re: Yii2 авторизация и Роли
Добавлено: 2014.05.04, 11:01
agrail
Поэтому нужно использовать defaultRoles.
Re: Yii2 авторизация и Роли
Добавлено: 2014.05.08, 08:47
Shappy
Дабы не использовать запись в rbac и defaultRoles, хочется нормально разобраться как делать авторизацию и хранение ролей в таблицах... Я так понимаю нужно использовать DbManager для этого... Также уже есть файл с миграцией для этого дела... Хочется спросить как действовать и что значат таблицы...
Как я понял auth_rule таблица - это название правила, дата создания...,
auth_item здесь какая-то конкретная роль и мы ее описываем, например "Пользователь",
auth_item_child - таблица для наследования ролей,
auth_assignment - в этой таблице записывается какая роль какому юзеру присваивается. Если что-то не так, поправьте пожалуйста...
Сам вопрос: что нам нужно для организации авторизации и записи в эти таблицы:)
Я понимаю так:
1. в конфиге DbManager прописываем.
2. Должна быть минимальная таблица User минимум - это как в basic-приложении:
public $id;
public $username;
public $password;
public $authKey;
public $accessToken;
3. Ну и дальше собственно не понятно, куда копать и как реализовывать... Какие методы должны быть... Так же не очень понятно для чего нужны эти поля вообще: public $authKey; public $accessToken;
Если кто-нибудь распишет, буду очень благодарен... В документации пока нету как я понял организации всего этого дела через таблицы...
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.07, 11:10
VaNnOrus
Ребят, ну ответьте уже хоть кто-нибудь хоть в одной теме по рбак'у :С
За неимением нормальной документации начал рыть исходники. Выяснил, что, оказывается, type у item'а - это либо 1 (право, permission), либо 2 (роль, role). Хоть что-то проясняться стало.
Кто-нибудь может по-человечески рассказать как работать с rbac на бд?
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.07, 12:12
vova07
А что конкретно интересует?
Задавайте конкретные вопросы, думаю ответы не заставят себя ждать.
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.07, 12:38
vova07
Процесс работы RBAC в Yii 2 очень простой. Хочу заметить что разница между DbManager и PhpManager одна, место хранения данных. Первый хранит данные в БД, второй в ПХП файлах. все остальное это один интерфейс, с разной реализацией.
Для того чтобы начать работу с RBAC (любым) нужно:
- Сконфигурировать "authManager" в своем конфиг файле.
- Если выбран метод хранения в БД, то нужно запустить
миграции для создания нужных таблиц, или воспользоваться готовым
дампом.
- Завести таблицу с пользователями, структура может быть любой, и никаких спец требований у самого RBAC тут нет. Главное что есть "PrimaryKey"/
- Создать свой список ролей. Легче всего для это-го можно использовать API, пример создания обычных правил можно посмотреть
тут например. В данном примере создание самих ролей было отделено в свой консольный контроллер, для удобства. Данное действие делается один раз. Конечно если нужны дополнительные роли то пишем другие экшены и добавляем их по необходимости. Думаю описывать методы не стоит, так как там все интуитивно понятно.
- После того как у нас есть таблица с пользователями, и есть наши таблицы с заполненными правилами, осталось только сделать присваивание. Присваивать роли пользователю обычно нужно при регистрации. Вернее после сохранения нового пользователя делается присваивание его роли: живой пример
тут:
Код: Выделить всё
$auth = Yii::$app->authManager; // Создаём экземпляр менеджера
/*
Определяем название роли.
В данном примере поле "role" содержит название роли что-то типа: "admin" или "moderator", эти названия уже есть в БД,
и были созданы через API что в пунтке выше.
*/
$name = $this->role ? $this->role : self::ROLE_DEFAULT;
$role = $auth->getRole($name); // Находим нашу роль в базе, по его названию.
if (!$insert) { // Проверяем если это не первое сохранение
$auth->revokeAll($this->id); // Если это обновление записи, то удаляем все права и роли нашего пользователя, так как мы ему присваиваем новые.
}
/*
Само присваивание роли.
$this->id тут является ИД-шником пользователя, хотя у вас это может быть что-то другое.
То есть ваш "PrimaryKey".
*/
$auth->assign($role, $this->id);
- Процесс прикрутки РБАК окончен. При обновлении делается тоже самое, и в примере выше это уже учтено. Теперь все что осталось это использовать проверки в нужных местах, типа такого:
Код: Выделить всё
if (Yii::$app->user->can('admin')) { // "admin" является названием роли которое было создано через API "authManger"-а.
echo 'Hello, Admin!'
}
Вроде все, если есть еще вопросы, задавайте.
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.07, 22:09
VaNnOrus
vova07 писал(а):А что конкретно интересует?
Задавайте конкретные вопросы, думаю ответы не заставят себя ждать.
Пытаюсь использовать RBAC модуль yii2-admin с DbManager.
Описанные выше шаги вплоть до создания ролей/прав и их привязки к юзерам сделал, но ничего не работает. Постоянно 403.
Не могу понять как это работает.
Настроил модуль по инструкции:
Код: Выделить всё
'authManager' => [
'class' => \mdm\admin\components\DbManager::className(),
'defaultRoles' => [ 'Guest' ],
],
...
'as access' => [
'class' => \mdm\admin\components\AccessControl::className(),
'allowActions' => [
'site/login',
'site/logout',
]
],
Для AccessControl указаны исключения - вот они прекрасно работают. Из поведения в контроллере выпилил "access" вообще. Что делать дальше не представляю. Пробовал создать право index и site/index - никаких эмоций, 403.
Тулбар меню нормально выводится, поэтому решил попробовать там что-то вывести. if (Yii::$app->user->can('test')){ тут что-то показывал в тулбаре } - ничего не вывелось. Естественно право "тест" до этого создал и присвоил его роли, которая была установлена юзеру, с которого проверял.
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.09, 22:57
BrusSENS
Коллеги, скажите, а кто нибудь пробовал хранить в базе всю структуру RBAC и генерить её в файл? Вот сейчас думаю о таком подходе, может кто сможет поделиться опытом
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.09, 23:15
zelenin
BrusSENS писал(а):Коллеги, скажите, а кто нибудь пробовал хранить в базе всю структуру RBAC и генерить её в файл? Вот сейчас думаю о таком подходе, может кто сможет поделиться опытом
непонятно в чем профит?
есть три подхода:
1. Описывать все в php-файле, используя PhpManager
2. Описывать все в php-файле, импортируя его в БД
3. Напрямую работать с БД - самый геморный вариант, но единственный, позволяющий из админки точно настраивать права
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.10, 07:52
BrusSENS
zelenin писал(а):
непонятно в чем профит?
Ну хочется реализовать хранение прав в базе и уже рендерить всё это в файл, что бы не тянуть из базы всё это
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.10, 10:19
zelenin
BrusSENS писал(а):zelenin писал(а):
непонятно в чем профит?
Ну хочется реализовать хранение прав в базе и уже рендерить всё это в файл, что бы не тянуть из базы всё это
в чем профит?
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.10, 10:23
VaNnOrus
BrusSENS писал(а):zelenin писал(а):
непонятно в чем профит?
Ну хочется реализовать хранение прав в базе и уже рендерить всё это в файл, что бы не тянуть из базы всё это
Если не нужна бд - не используйте ее вообще. Это же очевидно.
А вообще, не вижу проблемы написать скрипт, собирающий текстовый файл нужной структуры с использованием данных из базы.
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.10, 10:44
VaNnOrus
Продолжаю ковырять rbac...
Что интересно - убрал из настроек блок as access - естественно никаких 403.
Проверил в контроллере ( Yii::$app->user->can(право) ) - все работает. Проверка ролей, проверка прав.
Замечательно, казалось бы, но нет. Теряется при таком раскладе самое главное - по умолчанию все должно быть запрещено, а разрешено только то, на что даны права.
Как я понимаю нужно как-то иначе настраивать as access, но как? Настройки брал из доков модуля...
Апд. Обожемой...вопрос снят.
Оказывается права нужно указывать с ведущим "/". В документации к модулю-то указать это, конечно, не нужно...пусть пользователи становятся экстрасенсами...
Когда ж разработчики начнут нормально документацию писать...
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.10, 11:43
BrusSENS
VaNnOrus писал(а):
А вообще, не вижу проблемы написать скрипт, собирающий текстовый файл нужной структуры с использованием данных из базы.
Не проблема, спору нет.
Но сейчас столкнулся с другой неприятной штуковиной. Как можно заметить, при присвоении роли, она прописывается явно, не как в Yii1 можно это было делать. Так вот собственно вся некрасивость в том, что судя по всему, если будет 1000 000 пользователей, то файл раздуется до ненормальных размеров что ли?
UPD:VaNnOrus писал(а):В документации к модулю-то указать это, конечно, не нужно...пусть пользователи становятся экстрасенсами...
Когда ж разработчики начнут нормально документацию писать...
Это вы где такой модуль нашли? Yii2-start что ли?
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.10, 11:53
zelenin
BrusSENS писал(а):
Но сейчас столкнулся с другой неприятной штуковиной. Как можно заметить, при присвоении роли, она прописывается явно, не как в Yii1 можно это было делать. Так вот собственно вся некрасивость в том, что судя по всему, если будет 1000 000 пользователей, то файл раздуется до ненормальных размеров что ли?
если вы будете выгружать из БД, то да.
не надо этого делать.
Re: Yii2 авторизация и Роли
Добавлено: 2014.11.10, 11:55
BrusSENS
zelenin писал(а):
если вы будете выгружать из БД, то да.
не надо этого делать.
Насколько я заметил, то и при описании в файле они тоже записываются для каждого пользователя
UPD: Получается, что вариант только один - хранение в БД? (Для более менее крупных проектов)