[TOC]
Qimall已经内置的 RBAC 权限管理,并对其进行了二次开发,无限父子级权限分组、可自由分配子级权限
基于角色权限控制; 权限管理; 角色; 基于角色的访问控制策略; 基于角色的访问控制;
首先我们创建用户的都会给用户选择一个角色,角色可以控制菜单的访问权限、编辑、删除等操作权限,每个用户有不同角色,每个角色可以控制多菜单。在Qimall 系统中用户发送请求,系统会先进行身份验证和权限验证,在BaseContronller重新了beforeAction调用了Auth::verify()方法进行身份验证和权限验证,其他Contronller继承BaseContronlle。如果有权限则可以进行往下操作,如果没有权限则提示无权限操作
举个例子
角色获取菜单控制权限
checked_key: [2271, 2272, 2273, 2274, 2278, 2262, 2263, 2264, 2265, 2275, 2276, 2266, 2267, 2268, 2269, 2270, 2279,…]
所有的菜单
item_list: [{id: 2271, name: "admin/addons/index", title: "应用管理", app_id: "backend", addons_name: "", pid: 0,…},…]
item_list中可以看到有那些菜单,在checked_key看到该角色已经授权了那些功能,开发中只需要把对于菜单ID放入checked_key中,这就完成可对角色赋予控制菜单的权限.
平台后台-->账号管理-->角色管理,添加新增,填写完内容(带星号是必填项)给角色的权限菜单中选择对应菜单打钩,然后添加确定。角色创建完成
use common\models\rbac\AuthRole;
/**
* $params['id'] ID 系统判断ID字段存在是编辑,ID不存在是添加角色
* $params['title'] 标题名称
* $params['pid'] 父级ID
* $params['sort'] 排序
* $params['status'] 状态
* $params['app_id'] 应用ID
* $params['mall_id'] 商城ID
* $params['merchant_id'] 商户ID
* $params['item_ids'] 菜单ID
*/
$res = AuthRole::setData($params);
后台折叠方式展示角色列表
use common\models\rbac\AuthRole;
/**
* 获取角色列表
* @param $cond 筛选条件
* @param $with 关联模型
* @param $is_array 是否返回数组
*/
common\model\AuthRole::getRole($cond,$with,$is_array);
Qimall的账号有超级管理员、管理员、操作员三种类型
use common\models\backend\Admin;
const ADMIN_TYPE_SUPER = 1; // 超级管理员
const ADMIN_TYPE_AGENT = 2; // 管理员(代理商新增商城等操作)
const ADMIN_TYPE_OPERATE = 3; // 操作员(登录至商城)
平台后台-->账号管理-->账号列表,添加新增,填写完信息,管理员类型有三种,超级管理是拥有所有权限。每个账号只可以选择一种角色。
账号创建并分配角色
/**
* 账号创建并分配角色
*$params[‘username’] 名称
*$params[‘account’] 账号
*$params[‘password:’] 密码
*$params[‘mall_id’] 商城ID
*$params[‘mch_id’] 商户ID
*$params[‘store_id’] 门店id
*$params[‘auth_key’] 授权KEY
*$params[‘access_token’] 授权access_token
*$params[‘admin_type’] 账号类型
*$params[‘mall_num’] 创建商城最大数量
*$params[‘expired_at’] 过期时间
*$params[‘remark’] 备注
*$params[‘is_delete’] 是否删除 1是0否
*$params[‘created_at’] 创建时间
*$params[‘updated_att’] 更新时间
*$params[‘admin_role_id’] 管理员角色表的id
*$params[‘role’] 角色名称
*$params[‘role_id’] 角色ID
*/
common\model\Admin::setData($params);
/**
* 获取角色列表
* @param $params 筛选条件
* @param $count 是否现在所有页码 true/false
* @param $is_array 是否返回数组
*/
$page_data = Admin::listPage($params, $count);