程序员人生 网站导航

[置顶] (十二) yii2 rbac使用DbManager来实现后台的权限判断

栏目:综合技术时间:2015-04-17 08:58:16

我用的是yii2的高级利用版本 (下载地址)


yii2 的分两种1种是PhpManager,另外1种就是DbManager了

我下面用到的就是DbManager


第1步、配置你的mian.php


具体配置自己看yii的官网文档吧: 文档


return [ // ... 'components' => [ 'authManager' => [ 'class' => 'yii bacDbManager', ], // ... ], ];



第2步、生成数据表


yii migrate --migrationPath=@yii/rbac/migrations
如果不行在yii 前面增加php 


数据库已生成数据了有4个表


auth_assignment: 用户角色表

auth_item_child: 角色跟权限关联表

auth_item: 保存角色或权限

auth_rule: 规则表(目前我没有用到)


第3步、生成model


在gii中生成这个4个表的model,但是还要增加两个model才行

复制item稍作修改就行了,命名方式你们自己定。下面是我自己命名的:

RoleForm.php PermissionForm.php
在官网文档上可以看到yii-rbac-Role隐藏继承的常量以下:
TYPE_PERMISSION 默许值 2
TYPE_ROLE 默许值 1
都定义在: yii bacItem(你们看文档rbac中的Role最底下就是咯)
</pre><pre name="code" class="php">由于这两个model都是对auth_item表进行数据操作所以呢我们这两个model只要继承于AuthItem.php(也就是用gii对auth_item表成后的那个文件)然后修改下我们刚才多加的两个model(RoleForm, PermissionForm)


第4步、修改RoleForm.php、PermissionForm.php


RoleForm.php内容以下:

class RoleForm extends AuthItem { public $child;//这个是用来放权限的 public function init() { parent::init(); //常量TYPE_ROLE=1 $this->type = Item::TYPE_ROLE; } }
PermissionForm.php 内容以下: class PermissionForm extends AuthItem { public function init() { parent::init(); //常量TYPE_PERMISSION=2 $this->type = Item::TYPE_PERMISSION; } }


第5步、创建对应的controller

控制器命名根据你们自己习惯


首先说下PermissionController(用于权限管理)

表单提交时auth_item表中的name、type不要空了就好

然后我们实例化rbac中的Permission

use yii bacPermission; 记得带上它 $permission = new Permission(); 在将表单数据进行赋值 $permission->name = $model->name; $permission->type = $model->type; //这里将权限添加到auth_item中 $bool = Yii::$app->authManager->add( $permission );

有了权限自然少不了RoleController(用于角色管理)

use yii bacRole; $role = new Role(); $role->name = $model->name; $role->type = $model->type; $bool = $this->authManager->add( $role );

不同的是我们要给角色赋予我们所创建的角色对吧也就是在RoleForm中所添加的$child这个变量

这个时候我们要进行两步操作

(1) //权限列表 $permissions = Yii::$app->authManager->getPermissions(); $perArr = array(); foreach ($permissions as $key => $value) { $perArr[$value->name] = $value->name; } //添加角色的时候同时赋予权限,所以权限列表就是为了给角色添加权限 (2)
//表单提交落后行权限写入 foreach ( $child as $val) { //获得权限 $childObj = Yii::$app->authManager->getPermission($val); //给item_child写入数据(权限表) Yii::$app->authManager->addChild( $role, $childObj ); }

最后就是给所创建的角色分配给用户了AssignMentController

//获得角色对象 $role =Yii::$app->authManager->getRole( $model->item_name ); //assign参数 角色对象, 用户id $bool = Yii::$app->authManager->assign( $role, $userId );

第6步、检查用户是不是有权限操作

创建1个控制器用于controllers下需要判断权限的控制器都继承于这个基类

BaseController是我自己写的,这个你们自己可以命名其他。。。

class BaseController extends Controller
public function init() { parent::init();  //用户id
$userId = Yii::$app->user->getId(); //权限规则逻辑….. $permission = ‘这个是你权限规则逻辑得出的的结果'; if ( !Yii::$app->authManager->checkAccess( $userId , $permission ) ) { throw new CHttpException(403, '没有权限访问'); } }
}


好吧,忙了1天删除修改都没有时间写,写出来了在进行更新!!!

希望能给大家帮助!!!谢谢大家!!不喜勿喷!!!!

转载请说明出处:  指尖上的艺术家 http://blog.csdn.net/arthuralston2015/article/details/44969867




------分隔线----------------------------
------分隔线----------------------------

最新技术推荐