如何添加角色给用户? Yii2

问题描述:

我们使用Yii2框架最后一个alpha。用户角色已经创建,但问题在于它如何分配给用户。文档不存在。如何添加角色给用户? 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

+0

有没有一种方法可以通过GUI为用户分配角色而不是硬编码? –

+1

不应该是$ r-> assign('role','id_user')而是$ r-> assign('id_user','role')? – user2270248

解决!

================创建角色============

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

========= ======分配==================

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

需要添加哪个文件以及使用哪种函数编码? – user7282

+0

@ 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; 
} 

无可否认,这不是“靠书本”。但它简单,快速和有效。