sys-auth.md 4.0 KB

权限控制

[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中,这就完成可对角色赋予控制菜单的权限.

添加和编辑角色

​ 平台后台-->账号管理-->角色管理,添加新增,填写完内容(带星号是必填项)给角色的权限菜单中选择对应菜单打钩,然后添加确定。角色创建完成

![role1]

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