簡體   English   中英

Yii2如何使用DbManager分配角色?

[英]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_nameauth_assignment ,以及在創建新用戶時如何分配角色?

您可以使用authManagerassign功能為用戶分配角色。 通用語法為:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM