### **权限控制** > [TOC] > > Qimall已经内置的 RBAC 权限管理,并对其进行了二次开发,无限父子级权限分组、可自由分配子级权限 ### 控制说明 基于角色权限控制; 权限管理; 角色; 基于角色的访问控制策略; 基于角色的访问控制; ![](../img/role.png) ### 用户是如何获取到权限呢? ​ ``` 首先我们创建用户的都会给用户选择一个角色,角色可以控制菜单的访问权限、编辑、删除等操作权限,每个用户有不同角色,每个角色可以控制多菜单。在Qimall 系统中用户发送请求,系统会先进行身份验证和权限验证,在BaseContronller重新了beforeAction调用了Auth::verify()方法进行身份验证和权限验证,其他Contronller继承BaseContronlle。如果有权限则可以进行往下操作,如果没有权限则提示无权限操作 ``` **举个例子** 角色获取菜单控制权限 ```php checked_key: [2271, 2272, 2273, 2274, 2278, 2262, 2263, 2264, 2265, 2275, 2276, 2266, 2267, 2268, 2269, 2270, 2279,…] ``` 所有的菜单 ```php item_list: [{id: 2271, name: "admin/addons/index", title: "应用管理", app_id: "backend", addons_name: "", pid: 0,…},…] ``` item_list中可以看到有那些菜单,在checked_key看到该角色已经授权了那些功能,开发中只需要把对于菜单ID放入checked_key中,这就完成可对角色赋予控制菜单的权限. ### 添加和编辑角色 ​ 平台后台-->账号管理-->角色管理,添加新增,填写完内容(带星号是必填项)给角色的权限菜单中选择对应菜单打钩,然后添加确定。角色创建完成 ##### ![role1] ![](../img/role1.png) ```php 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); ``` ### 获取分配角色列表 ​ 后台折叠方式展示角色列表 ![](../img/role2.png) ```php use common\models\rbac\AuthRole; /** * 获取角色列表 * @param $cond 筛选条件 * @param $with 关联模型 * @param $is_array 是否返回数组 */ common\model\AuthRole::getRole($cond,$with,$is_array); ``` ### 账号类型 ​ Qimall的账号有超级管理员、管理员、操作员三种类型 ```php use common\models\backend\Admin; const ADMIN_TYPE_SUPER = 1; // 超级管理员 const ADMIN_TYPE_AGENT = 2; // 管理员(代理商新增商城等操作) const ADMIN_TYPE_OPERATE = 3; // 操作员(登录至商城) ``` ### 账号创建并分配角色 ​ 平台后台-->账号管理-->账号列表,添加新增,填写完信息,管理员类型有三种,超级管理是拥有所有权限。每个账号只可以选择一种角色。 ![](../img/role3.png) ```php 账号创建并分配角色 /** * 账号创建并分配角色 *$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); ``` ### 账号列表 ![](../img/role4.png) ```php /** * 获取角色列表 * @param $params 筛选条件 * @param $count 是否现在所有页码 true/false * @param $is_array 是否返回数组 */ $page_data = Admin::listPage($params, $count); ```