Управление ролями Yii2 с помощью rbac и хранилища базы данных

Я хочу узнать о членстве в Yii2 и использовать Yii для хранения и извлечения ролей с использованием базы данных.

Я прочитал Авторизацию безопасности и Как добавить роль пользователю? и У кого-нибудь есть рабочий пример Rbac? а также попробуйте использовать расширение yii2-admin и попытайтесь понять, как Yii управляет ролями пользователей но я не могу найти рабочие образцы или простые пошаговые примеры.

Пожалуйста, направьте меня и скажите мне самое простое решение.


person b24    schedule 03.07.2014    source источник


Ответы (2)


Внедрение управления доступом на основе ролей — очень простой процесс, и вы даже можете загрузить свои роли из базы данных, если хотите.

Шаг 1: Создание необходимых таблиц в базе данных [Вы также можете применить миграцию с помощью консольной команды yii migrate вместо шага 1]

Первым шагом является создание необходимых таблиц в базе данных. Ниже приведен sql, который необходимо запустить в базе данных.

drop table if exists `auth_assignment`;
drop table if exists `auth_item_child`;
drop table if exists `auth_item`;
drop table if exists `auth_rule`;

create table `auth_rule`
(
`name` varchar(64) not null,
`data` text,
`created_at` integer,
`updated_at` integer,
    primary key (`name`)
) engine InnoDB;

create table `auth_item`
(
`name` varchar(64) not null,
`type` integer not null,
`description` text,
`rule_name` varchar(64),
`data` text,
`created_at` integer,
`updated_at` integer,
primary key (`name`),
foreign key (`rule_name`) references `auth_rule` (`name`) on delete set null on update cascade,
key `type` (`type`)
) engine InnoDB;

create table `auth_item_child`
(
`parent` varchar(64) not null,
`child` varchar(64) not null,
primary key (`parent`, `child`),
foreign key (`parent`) references `auth_item` (`name`) on delete cascade on update cascade,
foreign key (`child`) references `auth_item` (`name`) on delete cascade on update cascade
) engine InnoDB;

create table `auth_assignment`
(
`item_name` varchar(64) not null,
`user_id` varchar(64) not null,
`created_at` integer,
primary key (`item_name`, `user_id`),
foreign key (`item_name`) references `auth_item` (`name`) on delete cascade on update cascade
) engine InnoDB;

Шаг 2: Настройка файла конфигурации

Теперь вы можете настроить файл конфигурации для использования authmanager как DbManager. Это делается путем добавления следующих строк в раздел компонентов вашего файла конфигурации.

     'authManager' => [
                           'class' => 'yii\rbac\DbManager',
                           'defaultRoles' => ['guest'],
          ],

Шаг 3: Добавление и назначение ролей.

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

    use yii\rbac\DbManager;
    $r=new DbManager;
    $r->init();
    $test = $r->createRole('test');
    $r->add($test);

И вы можете назначить его пользователям,

    $r->assign($test, 2);

http://www.yiiframework.com/doc-2.0/guide-security-authorization.html

person Dency G B    schedule 03.07.2014
comment
Спасибо, Денси, но у меня есть два вопроса: **1.**Основывается ли структура таблицы на соглашении или это ваше предложение?? **2.**Можно ли настроить управление ролями (создать таблицу, создать роль и назначить роль) с помощью миграции?? - person b24; 05.07.2014
comment
Обратитесь к обновленным таблицам rbac по адресу github.com/yiisoft/yii2. /blob/master/framework/rbac/migrations - person Dency G B; 07.07.2014
comment
Спасибо Денси. Все работало, кроме последнего шага (Шаг 3: Добавление и назначение ролей). Я получил ошибку при вызове метода сохранения после метода createRole: Вызов неизвестного метода: yii\rbac\DbManager::save() - person b24; 08.07.2014
comment
@b.cyclops.. извините, я использую альфа-версию Yii2. Пожалуйста, смотрите мой обновленный ответ - person Dency G B; 08.07.2014
comment
Вы можете обратиться к этой ссылке для получения более подробной информации.github.com/yiisoft/yii2/blob/master/docs/guide/ - person Dency G B; 08.07.2014
comment
Спасибо, это отлично работает, и я понимаю RBAC из вашего ответа. - person b24; 08.07.2014
comment
Здравствуйте, можете ли вы объяснить: нужно ли добавлять внешний ключ user_id в таблицу auth_assignment? - person raiym; 18.08.2014
comment
и сделайте префикс для каждой таблицы, например tbl_auth_assignment - person raiym; 18.08.2014
comment
Шаг 1 можно заменить на ./yii migrate --migrationPath=@yii/rbac/migrations/ - person Prabowo Murti; 07.01.2015

Обновлена ​​ссылка из официальных документов: http://www.yiiframework.com/doc-2.0/guide-security-authorization.html

Если вы работаете с базой данных, вам необходимо добавить authmanager в компоненты вашего приложения:

return [
// ...
'components' => [
    'authManager' => [
        'class' => 'yii\rbac\DbManager',
    ],
    // ...
],

];

А затем выполните миграцию:

yii migrate --migrationPath=@yii/rbac/migrations

Он автоматически создаст необходимые таблицы в вашей базе данных. Теперь вы можете получить доступ к AuthManager через

yii migrate --migrationPath=@yii/rbac/migrations

person JJPunch    schedule 25.04.2015
comment
Ответы только по ссылкам не приветствуются в Stack Overflow. Будет лучше, если вы включите существенную часть этой статьи. - person arogachev; 25.04.2015
comment
Этот ответ намного лучше. - person Ankur Soni; 29.01.2017
comment
Для базового приложения его нужно добавить в 2 места, тогда оно будет работать только console.php и web.php - person Krishnadas PC; 23.06.2020