2016-06-17 60 views
0

我想在我的Yii2高級應用程序中使用DBManager實現RBAC。 我已經閱讀了幾個來源的RBAC,並在https://yii2-cookbook.readthedocs.io/security-rbac/中實現了RBAC,但它不起作用。這是我的代碼。Yii2 RBAC實現使用DBManager分配規則失敗

在RbacController.php在控制檯下的common /配置

return [ 
    'vendorPath' => dirname(dirname(__DIR__)) . '/vendor', 
    'components' => [ 
     'cache' => [ 
      'class' => 'yii\caching\FileCache', 
     ], 
     'authManager' => [ 
      'class' => 'yii\rbac\DbManager', 
     ], 
    ], 
]; 

的main.php

/控制器

namespace console\controllers; 

use Yii; 
use yii\console\Controller; 

class RbacController extends Controller { 
public function actionAssign($role, $username) { 
     $user = User::find()->where(['username' => $username])->one(); 
     if (!$user) { 
      throw new InvalidParamException("There is no user \"$username\"."); 
     } 
     $auth = Yii::$app->authManager; 
     $asrole = $auth->getRole($role); 
     if (!$asrole) { 
      throw new InvalidParamException("There is no role \"$role\"."); 
     } 
     $auth->assign($asrole, $user->id); 
      } 
} 

遷移文件

use yii\db\Migration; 

class m160616_092939_rbac_init extends Migration 
{ 
    public function up() 
    { 
     $auth = Yii::$app->authManager; 
     //add permission 
     $manageGivenTable = $auth->createPermission('manageGivenTable'); 
     $manageGivenTable->description = 'Manage and Generate Given Table '; 
     $auth->add($manageGivenTable); 

     //add permission 
     $manageUsers = $auth->createPermission('manageUsers'); 
     $manageUsers->description = 'Manage users'; 
     $auth->add($manageUsers); 

     //add role. dan ngasih tahu kalau yang tergabung di sbr dapat memanage given tabel 
     $sbr = $auth->createRole('sbr'); 
     $sbr->description = 'Tim SBR BPS HQ'; 
     $auth->add($sbr); 
     $auth->addChild($sbr, $manageGivenTable); 

     //add role dan ngasih tahu kalau admin dapat memanage user dan sekaligus mewarisi sifat-sifat sbr 
     $admin = $auth->createRole('admin'); 
     $admin->description = 'Web Administrator, Editor, and Developer'; 
     $auth->add($admin); 
     $auth->addChild($admin, $sbr); 
     $auth->addChild($admin, $manageUsers); 
    } 

我嘗試在關於頁面。在控制器文件,我添加

'actions' => ['about'], 
'allow' => true, 
'roles' => ['manageUsers'], 

注:可能是這樣的信息需要

你能幫我嗎? 編輯:我使用的命令是這樣

yii rbac/assign admin adminname 
在未來

提示的東西實現角色分配,我想通過管理面板來分配用戶角色。

+0

我讀過的另一個來源:http://stackoverflow.com/questions/24554712/yii2-role-management-with-rbac-and-database-storage和http://www.yiiframework.com/doc- 2.0/guide-security-authorization.html – Kurniawantaari

+0

請解釋你的錯誤 –

+0

錯誤是關於任何人無法訪問的頁面。 admin無法訪問它,sbr無法訪問它,未經授權的用戶也無法訪問它。我認爲角色分配不當。分配角色時可能缺少某些東西? – Kurniawantaari

回答

0

我添加

use common\models\User; 

,它做工精細。

0

該角色似乎沒有分配。嘗試在RbacController.php添加此

try { 
    $info = $auth->assign($asrole, $user->id); 
    VarDumper::dumpAsString("Role has been assigned ".$info); 
} catch (Excpetion $e) { 
    VarDumper::dumpAsString("Exception:".$e); 
} 
+0

我應該在哪裏放? **編輯:**我已通過命令提示符分配角色,例如'yii rbac/assign admin adminname',但沒有任何更改。 – Kurniawantaari