php - example - ¿Cómo agregar rol al usuario? Yii2
rbac yii2 español (5)
Utilizamos Yii2 framework último alfa. El rol para el usuario ya creado, pero el problema es cómo se asigna al usuario. La documentación está ausente.
Para la versión de la base de datos de RBAC use DbManager (quote 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
Ejemplo de reglas de acceso:
<?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'' );
}
}
?>
No olvide agregar esto a su archivo de configuración (config / main.php):
''components'' => [
''authManager''=>array(
''class'' => ''yii/rbac/DbManager'',
''defaultRoles'' => [''end-user''],
),
...
]
Mesas:
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;
También puede encontrar esta información en el directorio "yii / rbac" (incluidos otros archivos SQL). Para funcionalidad y más detalles:
https://github.com/yiisoft/yii2/blob/master/docs/guide/security-authorization.md
Resuelto
================ crear función ============
use yii/rbac/PhpManager;
$r=new PhpManager;
$r->init();
$r->createRole("admin","Администратор");
$r->save();
=============== asignar ==================
$r->assign(''1'',''admin''); //1 is user id
Una forma realmente sencilla de lograr un rol de administrador es agregar esto a su controlador:
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''],
],
],
],
];
}
Luego, agregue a su modelo de User
un isAdmin()
que devuelva true
para sus usuarios de administrador y false
para todos los demás. Personalmente, yo uso:
public function isAdmin() {
return Self::ROLE_ADMIN === $this->role;
}
Es cierto que esto no es "por el libro". Pero es simple, rápido y eficaz.
$user_id = 1;
$auth = new DbManager;
$auth->init();
$role = $auth->createRole(''editor'');
$auth->add($role);
$auth->assign($role, $user_id);
================================================== ======================= Si desea seleccionar el rol en lugar de crear entonces
$auth = new DbManager;
$auth->init();
$role = $auth->getRole(''admin'');
$auth->assign($role, $user_id);
¡100% trabajado!
$user_id = /Yii::$app->user->id;
$auth = new DbManager;
$auth->init();
$role = $auth->createRole(''editor'');
$auth->add($role);
$auth->assign($role, $user_id);