2016-06-17 7 views
0

Я пытаюсь реализовать RBAC с помощью DBManager в моем расширенном приложении Yii2. Я читал о RBAC в нескольких источниках и реализовал RBAC, как в https://yii2-cookbook.readthedocs.io/security-rbac/, но он не работает. Вот мой код.Yii2 реализация RBAC с использованием правила назначения DBManager fail

в main.php под общим/конфигурации

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

в RbacController.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'], 

Примечание: может быть эта информация необходима

Помогите мне, пожалуйста? Edit: Я осуществлять роль Присвоить Использование параметров командной строки что-то вроде этого

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

в RbacController.php добавить

use common\models\User; 

и работать нормально.

0

Роль кажется не назначенной. Попробуйте добавить

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

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

  • Нет связанных вопросов^_^