2015-02-13 4 views
3

Мы читаем учебники, но мы все еще не понимаем всего этого (было сосредоточено здесь: http://www.yiiframework.com/doc-2.0/guide-security-authorization.html). Большинство из них используют расширенный шаблон, но мы используем только базовые.Yii 2 Создание нескольких пользовательских ролей (RBAC)

Вопрос в том, нужен ли нам другой контроллер для RBAC? Где мы размещаем такие коды, например:

$r->init(); 
$r->createRole("bizadmin","Biz Administrator"); 
$r->save(); 
$r->assign('2','bizadmin'); 

Какие таблицы db нам нужно создать? Мы создали пользовательскую таблицу, но не знаем, что делать дальше.

Надеюсь, что кто-то может дать подробное объяснение.

Пожалуйста, помогите. Мы все еще очень новичок в этом. Спасибо.

EDIT:

Мы пытались это:

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 '?' 
       ], 
      ], 
     ], 
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'logout' => ['post'], 
      ], 
     ], 
    ]; 
} 

public function actionIndex() 
{ 
    $r = new DbManager; 
    $r->init(); 
    $r->createRole("bizadmin","Biz Administrator"); 
    $r->save(); 

    $r->assign('2','bizadmin'); 

    return $this->render('index'); 
} 

Но мы получаем эту ошибку:

exception 'yii\web\ForbiddenHttpException' with message 'Login Required' in C:\wamp3\www\basic\vendor\yiisoft\yii2\web\User.php:431 
Stack trace: 
#0 C:\wamp3\www\basic\vendor\yiisoft\yii2\filters\AccessControl.php(149): yii\web\User->loginRequired() 
#1 C:\wamp3\www\basic\vendor\yiisoft\yii2\filters\AccessControl.php(126): yii\filters\AccessControl->denyAccess(Object(yii\web\User)) 
#2 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\ActionFilter.php(71): yii\filters\AccessControl->beforeAction(Object(yii\web\ErrorAction)) 
#3 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent)) 
#4 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Component.php(538): call_user_func(Array, Object(yii\base\ActionEvent)) 
#5 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Controller.php(259): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) 
#6 C:\wamp3\www\basic\vendor\yiisoft\yii2\web\Controller.php(108): yii\base\Controller->beforeAction(Object(yii\web\ErrorAction)) 
#7 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Controller.php(149): yii\web\Controller->beforeAction(Object(yii\web\ErrorAction)) 
#8 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Module.php(455): yii\base\Controller->runAction('error', Array) 
#9 C:\wamp3\www\basic\vendor\yiisoft\yii2\web\ErrorHandler.php(80): yii\base\Module->runAction('site/error') 
#10 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\ErrorHandler.php(95): yii\web\ErrorHandler->renderException(Object(yii\web\ForbiddenHttpException)) 
#11 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\web\ForbiddenHttpException)) 
#12 {main} 
Previous exception: 
exception 'yii\web\ForbiddenHttpException' with message 'Login Required' in C:\wamp3\www\basic\vendor\yiisoft\yii2\web\User.php:431 
Stack trace: 
#0 C:\wamp3\www\basic\vendor\yiisoft\yii2\filters\AccessControl.php(149): yii\web\User->loginRequired() 
#1 C:\wamp3\www\basic\vendor\yiisoft\yii2\filters\AccessControl.php(126): yii\filters\AccessControl->denyAccess(Object(yii\web\User)) 
#2 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\ActionFilter.php(71): yii\filters\AccessControl->beforeAction(Object(yii\base\InlineAction)) 
#3 [internal function]: yii\base\ActionFilter->beforeFilter(Object(yii\base\ActionEvent)) 
#4 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Component.php(538): call_user_func(Array, Object(yii\base\ActionEvent)) 
#5 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Controller.php(259): yii\base\Component->trigger('beforeAction', Object(yii\base\ActionEvent)) 
#6 C:\wamp3\www\basic\vendor\yiisoft\yii2\web\Controller.php(108): yii\base\Controller->beforeAction(Object(yii\base\InlineAction)) 
#7 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Controller.php(149): yii\web\Controller->beforeAction(Object(yii\base\InlineAction)) 
#8 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Module.php(455): yii\base\Controller->runAction('login', Array) 
#9 C:\wamp3\www\basic\vendor\yiisoft\yii2\web\Application.php(83): yii\base\Module->runAction('site/login', Array) 
#10 C:\wamp3\www\basic\vendor\yiisoft\yii2\base\Application.php(375): yii\web\Application->handleRequest(Object(yii\web\Request)) 
#11 C:\wamp3\www\basic\web\index.php(12): yii\base\Application->run() 
#12 {main} 

ответ

6

1) нет не нужен другой контроллер для RBAC

2) Для генерации Rbac вы должны использовать этот путь - http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#building-authorization-data и запустить

yii rbac/init 

Edit:

Добавить еще из моих проектов.

Я создаю rbac. У меня есть 2 файла. Первый items.php

<?php 
return [ 
    'dashboard' => [ 
     'type' => 2, 
     'description' => 'Админ панель', 
    ], 
    'user' => [ 
     'type' => 1, 
     'description' => 'Администратор', 
     'ruleName' => 'userRole', 
    ], 
    'moder' => [ 
     'type' => 1, 
     'ruleName' => 'userRole', 
     'children' => [ 
      'user', 
      'dashboard', 
     ], 
    ], 
    'admin' => [ 
     'type' => 1, 
     'ruleName' => 'userRole', 
     'children' => [ 
      'moder', 
     ], 
    ], 
]; 

Второй rules.php

<?php 
return [ 
    'userRole' => 'O:35:"common\\components\\rbac\\UserRoleRule":3:{s:4:"name";s:8:"userRole";s:9:"createdAt";N;s:9:"updatedAt";N;}', 
]; 

В наборе конфигурации для компонентов области

'authManager' => [ 
      'class' => 'yii\rbac\PhpManager', 
      'defaultRoles' => ['user','moder','admin'], 
      'itemFile' => '@common/components/rbac/items.php', 
      'assignmentFile' => '@common/components/rbac/assignments.php', 
      'ruleFile' => '@common/components/rbac/rules.php' 
     ], 

В проверке контроллера

if (\Yii::$app->user->can('createPost')) { 
    // create post 
} 

Контроль доступа Фильтр http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#access-control-filter - очень простая авторизация. Он предоставляет два состояния: auth user или NOT auth user (guest).

+0

hi @ vitalik_74. где я запускаю 'yii rbac/init'? извините, мне все еще нужна дополнительная информация. – kaynewilder

+0

Вы вызываете команду «yii» (это yii.bat в Windows) в корневой папке вашего приложения. Есть файл «yii» - видите ли вы? – robsch

+0

Запустите 'yii rbac/init' с консоли. Если вы используете Windows, запустите 'cd/to/root/projects', запустите' path/to/php yii rbac/init'. –

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