2016-07-01 21 views
0

Ich implementiere rbac mit yii2. Aber wenn ich versuche, die Rollen zu bekommen, die ich vorher erstellt habe, erhalte ich eine leere Variable: $authorRole = $auth->getRole('admin'); yii2 rbac authmanager getRoles() Rückgabe leer

Die Regel-Klasse, wo ich die tatsächliche Regel Logik.

yii/console/Controller/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; 
    } 
} 

nun die Rollen definieren ..

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

    } 
} 

Danach laufe ich konnte ./yii rbac/init um die Regeldateien zu erzeugen:

  • conso le/rbac/items.php
  • Konsolen-/rbac/rules.php

Dies ist weitgehend identisch zu der Dokumentation

yii/commom/config/main.php

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

Aber in

Frontend \ models \ SignupForm :: Anmeldungen()

ich ein leeres Ergebnis erhalten, wenn ich versuche, die Admin-Rolle zu bekommen:

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

hier ist der Wert von $ 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 
) 

Antwort

2

Es ist wahrscheinlich, weil Sie die RBAC in "Konsole/rbac/items.php und Konsole/rbac/rules.php" aber Ihr rbac PhpManager sucht diese Dateien in fortgeschrittenen/Frontend erzeugen

Sie könnten diese Dateien verschieben oder die richtigen Pfade

'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 
], 

Die „@common“ gesetzt ist yii2 alias alle verfügbaren Aliase hier aufgelistet: http://www.yiiframework.com/wiki/667/yii-2-list-of-path-aliases-available-with-default-basic-and-advanced-app/

Das sollte mir helfen, lassen Sie wissen, ob es sein wird, immer noch ein Problem