У меня есть 3 роли с Rbac в моем приложении на основе Yii2 (SuperAdmin, Admin, User). Как я могу назначить профиль этим пользователям.
Я хочу иметь несколько полей для профилей SuperAdmin и другие поля для профиля Admin, ...
У меня есть 3 роли с Rbac в моем приложении на основе Yii2 (SuperAdmin, Admin, User). Как я могу назначить профиль этим пользователям.
Я хочу иметь несколько полей для профилей SuperAdmin и другие поля для профиля Admin, ...
Назначить роль пользователю в 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);
Как только ваше приложение немного вырастет, вам нужно будет создать интерфейс администратора, который позволит вам назначать роли пользователям. (Я строю это сейчас!)