Мы использовали последний альфа-код Yii2. Роль для пользователя, уже созданного, но проблема в том, как он назначается пользователю. Документация отсутствует.Как добавить вакансию? Yii2
ответ
Для версии базы данных RBAC использовать DBManager (цитата FRM: Alexufo):
use yii\rbac\DbManager;
$r=new DbManager;
$r->init();
$r->createRole("admin","Administrator");
$r->save();
$r->assign('1','admin'); //1 is user id
Правила доступа:
<?php
namespace backend\controllers;
use yii;
use yii\web\AccessControl;
use yii\web\Controller;
class SiteController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
//'actions' => ['login', 'error'], // Define specific actions
'allow' => true, // Has access
'roles' => ['@'], // '@' All logged in users/or your access role e.g. 'admin', 'user'
],
[
'allow' => false, // Do not have access
'roles'=>['?'], // Guests '?'
],
],
],
];
}
public function actionIndex()
{
return $this->render('index');
}
}
?>
Не забудьте добавить это в файл конфигурации (конфигурации/main.php):
'components' => [
'authManager'=>array(
'class' => 'yii\rbac\DbManager',
'defaultRoles' => ['end-user'],
),
...
]
Таблицы:
drop table if exists `tbl_auth_assignment`;
drop table if exists `tbl_auth_item_child`;
drop table if exists `tbl_auth_item`;
create table `tbl_auth_item`
(
`name` varchar(64) not null,
`type` integer not null,
`description` text,
`biz_rule` text,
`data` text,
primary key (`name`),
key `type` (`type`)
) engine InnoDB;
create table `tbl_auth_item_child`
(
`parent` varchar(64) not null,
`child` varchar(64) not null,
primary key (`parent`,`child`),
foreign key (`parent`) references `tbl_auth_item` (`name`) on delete cascade on update cascade,
foreign key (`child`) references `tbl_auth_item` (`name`) on delete cascade on update cascade
) engine InnoDB;
create table `tbl_auth_assignment`
(
`item_name` varchar(64) not null,
`user_id` varchar(64) not null,
`biz_rule` text,
`data` text,
primary key (`item_name`,`user_id`),
foreign key (`item_name`) references `tbl_auth_item` (`name`) on delete cascade on update cascade
) engine InnoDB;
Вы также можете найти эту информацию в «юй/rbac "(включая другие файлы SQL). Для функциональности и получения более подробной информации:
https://github.com/yiisoft/yii2/blob/master/docs/guide/security-authorization.md
Решенный!
================ создать роль ============
use yii\rbac\PhpManager;
$r=new PhpManager;
$r->init();
$r->createRole("admin","Администратор");
$r->save();
========= ====== назначить ==================
$r->assign('1','admin'); //1 is user id
На каком файле и в какой функции этот код необходимо добавить? – user7282
@ user7282 В любом месте через 'Yii :: $ app-> authManager-> assign ('1', 'admin');' –
$user_id = 1;
$auth = new DbManager;
$auth->init();
$role = $auth->createRole('editor');
$auth->add($role);
$auth->assign($role, $user_id);
=============================== ======================================= 0 0 создавая затем
$auth = new DbManager;
$auth->init();
$role = $auth->getRole('admin');
$auth->assign($role, $user_id);
100% сработало!
$user_id = \Yii::$app->user->id;
$auth = new DbManager;
$auth->init();
$role = $auth->createRole('editor');
$auth->add($role);
$auth->assign($role, $user_id);
очень простой способ добиться роли администратора, чтобы добавить это к контроллеру:
use yii;
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'allow' => true,
'actions' => ['index'],
'roles' => ['@'],
],
[
'allow' => !Yii::$app->user->isGuest && Yii::$app->user->identity->isAdmin(),
'actions' => ['view', 'create', 'update', 'delete'],
],
],
],
];
}
Затем добавить к вашему User
моделирующие isAdmin()
, которая возвращает true
для администратора пользователя (ей) и false
для всех остальных. Лично я пользуюсь:
public function isAdmin() {
return Self::ROLE_ADMIN === $this->role;
}
По общему признанию, это не «по книге». Но это просто, быстро и эффективно.
- 1. Sidekiq: Найти последнюю вакансию
- 2. Node-Local Map уменьшить вакансию
- 3. Как отправить вакансию Spark из кода?
- 4. Jenkins 2.0 - Создать новую вакансию
- 5. Как добавить материализацию в Yii2
- 6. Yii2 добавить условия AssetBundle
- 7. Jenkins: Скрыть вакансию от анонимных пользователей
- 8. Отправить вакансию в Spark, используя кластер пряжи
- 9. Как добавить динамические поля без библиотеки YII2
- 10. Yii2 добавить как, где с одной стороны,%
- 11. Yii2: как изменить/добавить заголовки ответов?
- 12. Как добавить хешированные пароли в yii2
- 13. Как добавить день на день в yii2?
- 14. Yii2 - Как добавить OnChange событие в ActiveForm
- 15. Как добавить TOOLTIP в Yii2 NavBar
- 16. Как добавить столбец в MODEL в yii2
- 17. как добавить событие в fullcalendar в yii2
- 18. Yii2: Как добавить библиотеку JavaScript через композитор?
- 19. Как правильно добавить диаграмму Google в Yii2?
- 20. YII2: Как добавить ICON в заголовок gridview
- 21. Yii2 Как добавить параметры в тег сценария
- 22. Как добавить нижний колонтитул в Yii2 Gridview
- 23. Yii2 Добавить атрибут модели ActiveRecord
- 24. Добавить расширение Yii2 через Composer
- 25. yii2: добавить IFNULL исключения Command
- 26. Yii2: Не могу добавить поля формы динамически в Yii2
- 27. Создать вакансию в коде, который сохраняется в файле "quartz_jobs.xml"
- 28. Как создать Yii2 Breadcrumbs
- 29. YII2 добавить столбец суммы в gridview
- 30. Yii2 добавить/удалить строки в GridView
есть ли способ назначить роли пользователям через графический интерфейс вместо жесткого кодирования? –
Не должно быть $ r-> assign ('role', 'id_user') вместо $ r-> assign ('id_user', 'role')? – user2270248