usuarios example español control basado accesscontrol acceso php yii2

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);