[英]Yii2 how to use DbManager assignment roles?
我嘗試用DbManager制作RBAC。 我閱讀了一些指南,並做到了:
在配置中添加了authManager
:
'components' => [
//...
'authManager' => [
'class' => 'yii\rbac\DbManager',
'defaultRoles' => [
'user',
'moderator',
'admin',
'superadmin'
],
],
//...
]
在我的數據庫中導入了\\vendor\\yiisoft\\yii2\\rbac\\migrations\\schema-mysql.sql
;
寫GroupRule類:
namespace app\components\rbac;
use Yii;
use yii\rbac\Rule;
/**
* User group rule class.
*/
class GroupRule extends Rule
{
/**
* @inheritdoc
*/
public $name = 'group';
/**
* @inheritdoc
*/
public function execute($user, $item, $params)
{
if (!Yii::$app->user->isGuest) {
$role = Yii::$app->user->identity->role;
if ($item->name === 'superadmin') {
return $role === $item->name;
} elseif ($item->name === 'admin') {
return $role === $item->name || $role === 'superadmin';
} elseif ($item->name === 'moderator ') {
return $role === $item->name || $role === 'superadmin' || $role === 'admin';
} elseif ($item->name === 'user') {
return $role === $item->name || $role === 'superadmin' || $role === 'admin' || $role === 'moderator';
}
}
return false;
}
}
和rbac控制器:
namespace app\commands;
use Yii;
use yii\console\Controller;
use app\components\rbac\GroupRule;
use yii\rbac\DbManager;
/**
* RBAC console controller.
*/
class RbacController extends Controller
{
/**
* Initial RBAC action
* @param integer $id Superadmin ID
*/
public function actionInit($id = null)
{
$auth = new DbManager;
$auth->init();
$auth->removeAll(); //удаляем старые данные
// Rules
$groupRule = new GroupRule();
$auth->add($groupRule);
// Roles
$user = $auth->createRole('user');
$user->description = 'User';
$user->ruleName = $groupRule->name;
$auth->add($user);
$moderator = $auth->createRole(' moderator ');
$moderator ->description = 'Moderator ';
$moderator ->ruleName = $groupRule->name;
$auth->add($moderator);
$auth->addChild($moderator, $user);
$admin = $auth->createRole('admin');
$admin->description = 'Admin';
$admin->ruleName = $groupRule->name;
$auth->add($admin);
$auth->addChild($admin, $moderator);
$superadmin = $auth->createRole('superadmin');
$superadmin->description = 'Superadmin';
$superadmin->ruleName = $groupRule->name;
$auth->add($superadmin);
$auth->addChild($superadmin, $admin);
// Superadmin assignments
if ($id !== null) {
$auth->assign($superadmin, $id);
}
}
}
然后在控制台中輸入yii rbac/init 1
。
因此,現在為ID = 1的用戶分配超級管理員角色
並且我有我的角色的auth_item
表,但每行的type
列的值= 1! 我認為這很不正常。 我做錯了什么? 另一個問題-我應該如何將user
表的role
列與auth_assignment
表的item_name
列auth_assignment
,以及在創建新用戶時如何分配角色?
您可以使用authManager
的assign
功能為用戶分配角色。 通用語法為:
Yii::$app->authManager->assign(Yii::$app->authManager->getRole('user_role_here'), 'user_id_here');
例如
Yii::$app->authManager->assign(Yii::$app->authManager->getRole('moderator'), $this->getId());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.