2016-07-01 7 views
0

Я реализую rbac с помощью yii2. Но когда я пытаюсь получить роли, которые я ранее создал, я получаю пустую переменную: $authorRole = $auth->getRole('admin'); yii2 rbac authmanager getRoles() return empty

Класс правил, где я помещаю логику фактического правила.

юй/консоль/контроллер/UserGroupRule.php

namespace app\rbac; 

use Yii; 
use yii\rbac\Rule; 

/** 
* Checks if user group matches 
*/ 
class UserGroupRule extends Rule 
{ 
    public $name = 'userGroup'; 

    public function execute($user, $item, $params) 
    { 
     if (!Yii::$app->user->isGuest) { 
      $group = Yii::$app->user->identity->group; 
      if ($item->name === 'admin') { 
       return $group == 1; 
      } elseif ($item->name === 'author') { 
       return $group == 1 || $group == 2; 
      } 
     } 
     return false; 
    } 
} 

Теперь определение роли ..

yii/console/controller/RbacController.php 
namespace console\controllers; 

use Yii; 
use yii\console\Controller; 

class RbacController extends Controller 
{ 
    public function actionInit() 
    { 
     $auth = Yii::$app->authManager; 

     $rule = new \app\rbac\UserGroupRule; 
     $auth->add($rule); 

     $admin = $auth->createRole('admin'); 
     $admin->ruleName = $rule->name; 
     $auth->add($admin); 

    } 
} 

После этого я смог запустить ./yii RBAC/INIT для генерации файлов правил:

  • conso ле/RBAC/items.php
  • консоль/RBAC/rules.php

Это в основном идентичны документации

юй/Коммон/конфигурации/main.php

'authManager' => [ 
    'class' => 'yii\rbac\PhpManager', 
    'defaultRoles' => ['admin', 'author'], // your define roles 
], 

Но в

Frontend \ модели \ SignupForm :: Регистрация()

я получаю пустой результат, когда я пытаюсь получить роль администратора:

public function signup() 
{ 
    if ($this->validate()) { 
     $user = new User(); 
     $user->username = $this->username; 
     $user->email = $this->email; 
     $user->setPassword($this->password); 
     $user->generateAuthKey(); 
     $user->save(false); 

     $auth = Yii::$app->authManager; 
     $authorRole = $auth->getRole('admin'); 
     $auth->assign($authorRole, $user->getId()); 

     return $user; 
    } 

    return null; 
} 

здесь значение $ AUTH:

yii\rbac\PhpManager#1 
(
    [itemFile] => '/advanced/frontend/rbac/items.php' 
    [assignmentFile] => '/advanced/frontend/rbac/assignments.php' 
    [ruleFile] => '/advanced/frontend/rbac/rules.php' 
    [*:items] => [] 
    [*:children] => [] 
    [*:assignments] => [] 
    [*:rules] => [] 
    [defaultRoles] => [ 
     0 => 'admin' 
     1 => 'author' 
     2 => 'admin' 
     3 => 'author' 
    ] 
    [yii\base\Component:_events] => [] 
    [yii\base\Component:_behaviors] => null 
) 

ответ

2

Это, вероятно, потому, что вы генерировать RBAC в «консоли/RBAC/items.php и консоль/RBAC/rules.php», но ваш RBAC PhpManager ищет эти файлы в пожилом/фронтэнда

Вы можете переместить эти файлы или установить правильные пути

'authManager' => [ 
    'class' => 'yii\rbac\PhpManager', 
    'itemFile' => '@common/rbac/items.php', 
    'assignmentFile' => '@common/rbac/assignments.php', 
    'ruleFile' => '@common/rbac/rules.php', 
    'defaultRoles' => ['admin', 'author'], // your define roles 
], 

В «@common» является yii2 псевдонимом всех доступных псевдонимов, перечисленных здесь: http://www.yiiframework.com/wiki/667/yii-2-list-of-path-aliases-available-with-default-basic-and-advanced-app/

Это должно помочь, дайте мне знать, если будет еще вопрос