Как добавить роль к пользователю? Yii2

Мы использовали последнюю альфа-структуру Yii2. Роль для пользователя, уже созданного, но проблема в том, как он назначается пользователю. Документация отсутствует.

Для версии базы данных RBAC используйте DbManager (quote frm: Alexufo):

use yii\rbac\DbManager; $r=new DbManager; $r->init(); $r->createRole("admin","Administrator"); $r->save(); $r->assign('1','admin'); //1 is user id 

Пример Правила доступа:

 <?php namespace backend\controllers; use yii; use yii\web\AccessControl; use yii\web\Controller; class SiteController extends Controller { public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ //'actions' => ['login', 'error'], // Define specific actions 'allow' => true, // Has access 'roles' => ['@'], // '@' All logged in users / or your access role eg 'admin', 'user' ], [ 'allow' => false, // Do not have access 'roles'=>['?'], // Guests '?' ], ], ], ]; } public function actionIndex() { return $this->render( 'index' ); } } ?> 

Не забудьте добавить это в свой конфигурационный файл (config / main.php):

 'components' => [ 'authManager'=>array( 'class' => 'yii\rbac\DbManager', 'defaultRoles' => ['end-user'], ), ... ] 

Таблицы:

 drop table if exists `tbl_auth_assignment`; drop table if exists `tbl_auth_item_child`; drop table if exists `tbl_auth_item`; create table `tbl_auth_item` ( `name` varchar(64) not null, `type` integer not null, `description` text, `biz_rule` text, `data` text, primary key (`name`), key `type` (`type`) ) engine InnoDB; create table `tbl_auth_item_child` ( `parent` varchar(64) not null, `child` varchar(64) not null, primary key (`parent`,`child`), foreign key (`parent`) references `tbl_auth_item` (`name`) on delete cascade on update cascade, foreign key (`child`) references `tbl_auth_item` (`name`) on delete cascade on update cascade ) engine InnoDB; create table `tbl_auth_assignment` ( `item_name` varchar(64) not null, `user_id` varchar(64) not null, `biz_rule` text, `data` text, primary key (`item_name`,`user_id`), foreign key (`item_name`) references `tbl_auth_item` (`name`) on delete cascade on update cascade ) engine InnoDB; 

Вы также можете найти эту информацию в каталоге «yii / rbac» (включая другие файлы SQL). Для функциональности и более подробной информации:

https://github.com/yiisoft/yii2/blob/master/docs/guide/security-authorization.md

 $user_id = 1; $auth = new DbManager; $auth->init(); $role = $auth->createRole('editor'); $auth->add($role); $auth->assign($role, $user_id); 

================================================== ========================= Если вы хотите выбрать роль вместо

 $auth = new DbManager; $auth->init(); $role = $auth->getRole('admin'); $auth->assign($role, $user_id); 

100% работали!

Решено!

================ ролевая роль ============

 use yii\rbac\PhpManager; $r=new PhpManager; $r->init(); $r->createRole("admin","Администратор"); $r->save(); 

================= ================================================

 $r->assign('1','admin'); //1 is user id 

Очень простой способ добиться роли администратора – добавить это в свой контроллер:

 use yii; /** * @inheritdoc */ public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'allow' => true, 'actions' => ['index'], 'roles' => ['@'], ], [ 'allow' => !Yii::$app->user->isGuest && Yii::$app->user->identity->isAdmin(), 'actions' => ['view', 'create', 'update', 'delete'], ], ], ], ]; } 

Затем добавьте в свою модель User isAdmin() которая возвращает true для ваших пользователей (администраторов) и false для всех остальных. Лично я использую:

 public function isAdmin() { return Self::ROLE_ADMIN === $this->role; } 

По общему признанию, это не «по книге». Но это просто, быстро и эффективно.

 $user_id = \Yii::$app->user->id; $auth = new DbManager; $auth->init(); $role = $auth->createRole('editor'); $auth->add($role); $auth->assign($role, $user_id);