2014-01-23 3 views
14

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

ответ

14

Для версии базы данных 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

есть ли способ назначить роли пользователям через графический интерфейс вместо жесткого кодирования? –

+1

Не должно быть $ r-> assign ('role', 'id_user') вместо $ r-> assign ('id_user', 'role')? – user2270248

2

Решенный!

================ создать роль ============

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');' –

4
$user_id = 1; 

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

$auth->assign($role, $user_id); 

=============================== ======================================= 0 0 создавая затем

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

100% сработало!

0
$user_id = \Yii::$app->user->id; 

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

$auth->assign($role, $user_id); 
1

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

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

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

Смежные вопросы