Профиль пользователя Yii2 и Rbac

У меня есть 3 роли с Rbac в моем приложении на основе Yii2 (SuperAdmin, Admin, User). Как я могу назначить профиль этим пользователям.

Я хочу иметь несколько полей для профилей SuperAdmin и другие поля для профиля Admin, ...


person b24    schedule 10.07.2014    source источник


Ответы (1)


Назначить роль пользователю в Yii2 rbac лучше всего изначально, написав сценарий миграции и запустив его. Мой сценарий выглядит так

<?php

use yii\db\Schema;
use yii\db\Migration;
use yii\base\InvalidConfigException; 

use yii\rbac\DbManager;
use app\models\User;

class m141210_101111_user_authorize extends Migration
{
    /**
     * @throws yii\base\InvalidConfigException
     * @return DbManager
     *
     * Get the applications Authorization manager and make sure it's a valid 
     */
    protected function getAuthManager()
    {
        $authManager = Yii::$app->getAuthManager();
        if (!$authManager instanceof DbManager) {
            throw new InvalidConfigException('You should configure "authManager" component to use database before executing this migration.');
        }
        return $authManager;
    }

    public function up()
    {
        $authManager = $this->getAuthManager();
        $this->db = $authManager->db;

    $authManager = Yii::$app->getAuthManager();
        if (!$authManager instanceof DbManager) {
            throw new InvalidConfigException('You should configure "authManager" component in console.php to use database before executing this migration.');
        }

    $tableOptions = null;
        if ($this->db->driverName === 'mysql') {
            // http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci
            $tableOptions = 'CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE=InnoDB';
        }

    $admin = $authManager->createRole('admin');
    $admin->description = 'Administrator - can do anything';
    $authManager->add($admin);

    $manager=$authManager->createRole('manager');
    $manager->description = 'Manager level access';
    $authManager->add($manager);

    $user=$authManager->createRole('end-user');
    $user->description = 'Normal user';
    $authManager->add($user);

    // let user admin have admin rights.

    if (!User::findOne(['username' => 'admin']))
         echo ('No user named "admin" was found to assign admin rights to!');

    $authManager->assign($admin, User::findOne(['username' => 'admin'])->id);

    }

    public function down()
    {
        echo "m141210_101111_user_authorize cannot be reverted.\n";
        return false;
    }
}

Критическая линия

 $authManager->assign($admin, User::findOne(['username' => 'admin'])->id);

Как только ваше приложение немного вырастет, вам нужно будет создать интерфейс администратора, который позволит вам назначать роли пользователям. (Я строю это сейчас!)

person nimbusgb    schedule 10.12.2014