如何添加角色给用户? Yii2
对于RBAC的数据库版本使用DbManager(报价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 e.g. 'admin', 'user'
],
[
'allow' => false, // Do not have access
'roles'=>['?'], // Guests '?'
],
],
],
];
}
public function actionIndex()
{
return $this->render('index');
}
}
?>
不要忘记添加到您的配置文件(配置/ 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;
您也可以在“警予此信息/ rbac“目录(包括其他SQL文件)。 对于功能和更多的细节:
https://github.com/yiisoft/yii2/blob/master/docs/guide/security-authorization.md
解决!
================创建角色============
use yii\rbac\PhpManager;
$r=new PhpManager;
$r->init();
$r->createRole("admin","Администратор");
$r->save();
========= ======分配==================
$r->assign('1','admin'); //1 is user id
需要添加哪个文件以及使用哪种函数编码? – user7282
@ user7282在任何地方通过'Yii :: $ app-> authManager-> assign('1','admin');' –
$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%工作!
$user_id = \Yii::$app->user->id;
$auth = new DbManager;
$auth->init();
$role = $auth->createRole('editor');
$auth->add($role);
$auth->assign($role, $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
(S)和false
为其他人。我个人使用:
public function isAdmin() {
return Self::ROLE_ADMIN === $this->role;
}
无可否认,这不是“靠书本”。但它简单,快速和有效。
有没有一种方法可以通过GUI为用户分配角色而不是硬编码? –
不应该是$ r-> assign('role','id_user')而是$ r-> assign('id_user','role')? – user2270248