2016-06-17 2 views
0

내 Yii2 고급 응용 프로그램에서 DBManager를 사용하여 RBAC를 구현하려고합니다. 여러 소스에서 RBAC에 대해 읽었으며 https://yii2-cookbook.readthedocs.io/security-rbac/과 같이 RBAC를 구현했지만 작동하지 않습니다. 여기 내 코드가있다. 콘솔에서 RbacController.php에서 일반/설정Yii2 DBManager 할당 규칙을 사용하는 RBAC 구현이 실패합니다.

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

오류는 약 누구나 액세스 할 수없는 페이지입니다. 관리자가 액세스 할 수 없으며 sbr이 액세스 할 수 없으며 권한이없는 사용자도 액세스 할 수 없습니다. 나는 역할이 제대로 할당되지 않는다고 생각한다. 역할을 할당 할 때 누락 된 것이있을 수 있습니까? – Kurniawantaari

답변

0

를 추가하는 시도하고 그것을 잘 작동합니다.

0

역할이 할당되지 않은 것으로 보입니다. 내가

use common\models\User; 

를 추가 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

관련 문제