外观
通用授权
简介
通用授权组件(AbAuthorization)提供数据授权过滤功能,可以通过页面配置,简单整合,快速构建具备授权管理功能。
前端整合
源码位置: agilebpm-ui-v5/src/agilebpm/component/ab-authorization
页面使用组件:
//引用组件
import abAuthorization from '@/agilebpm/component/ab-authorization/index.vue'
// 使用组件
<ab-authorization
ref="authorizationRef"
v-model="info.authorizationDialogVisible"
:authorization-list="info.authorizationData.authorizationList"
:authorization-type="info.authorizationData.rightsObject"
:rights-code="info.authorizationData.rightsTarget"
:save-flsg="false"
@authorization-data="getAuthorizationList"
/>
组件中的属性说明
名称 | 必填 | 类型 | 描述 |
---|---|---|---|
modelValue | 是 | Boolean | 是否打开授权对话框 |
rightsCode | 是 | String | 要授权的资源关键字段的值,如:流程的编码,文档的id |
authorizationType | 是 | String | 要授权的模块,如:流程(FLOW),文档(DOCUMENT) |
saveFlsg | 否 | Boolean | 是否自动保存,默认是(true),组件自动保存数据。否(false), 使用@authorization-data事件,自己实现保存逻辑,authorization-data事件会返回选中的数据 |
authorizationList | 否 | Array | 默认打开展示的授权集合 |
目前AgileBpm 系统内置的authorizationType 有以下几种:
FLOW("FLOW","流程定义"),
CHART("CHART","自定义图表"),
HOME("HOME","首页组件"),
DOCUMENT("DOCUMENT","知识库");
自己实现保存授权逻辑
//页面引入保存接口
import { saveAuthorization } from '@/api/sys/ab-sys-authorization'
//使用保存接口
saveAuthorization(authorizationData).then(() => (//保存成功后自己的逻辑))
//保存授权需要转换成的参数对象
authorizationData: {
rightsTarget: '',
rightsObject: '',
authorizationList: [] as Array<{
rightsType: string
rightsIdentity: string
rightsIdentityName: string
}>,
},
页面展示如下图
后端整合
1.引入 ab-sys-api模块
使用通用授权功能,首先要引入sysAuthorizationApi,使用其中的 getUserRightsSql 方法
// 引入maven
<dependency>
<groupId>com.dstz</groupId>
<artifactId>ab-sys-api</artifactId>
</dependency>
// 引入Api
@Autowired
SysAuthorizationApi sysAuthorizationApi
2.添加枚举变量
RightsObjectConstants 定义了授权的类型,该变量必须添加,作为getUserRightsSql 的参数。
枚举类的全限定名:com.dstz.sys.api.constant.RightsObjectConstants
java
com.dstz.sys.api.constant.RightsObjectConstants
public enum RightsObjectConstants {
VARTEST("NAME","要添加的模块描述");
private final String key;
private final String label;
RightsObjectConstants(String key,String label){
this.key = key;
this.label = label;
}
}
3. 使用sysAuthorizationApi.sysAuthorizationApi 方法
在需要过滤的列表查询方法中使用sysAuthorizationApi.sysAuthorizationApi 查询出授权的参数
java
/**
* 获取授权sql
* @param rightsObject 授权模块
* @param userId 用户id
* @param targetKey 默认为id 为objectTarget授权目标的字段key
* @return
*/
Map<String, Object> getUserRightsSql(RightsObjectConstants rightsObject, String userId, String targetKey);
4. getUserRightsSql 返回值解析
Map<String, Object> getUserRightsSql 返回的map中有两个值rightsSql,rights:
- rightsSql :连接权限表的sql语句,若查询语句简单可直接在sql中添加
${rightsSql}
sql
INNER JOIN sys_authorization rights ON id_ = rights.rights_id_ where rights_permission_code_ in ( id-type,groupid-type )
如:
inner join sys_authorization rights on key_ = rights.rights_target_ and rights.rights_object_ ='FLOW' and rights_permission_code_ in ( '1580490431397937152-org','1580484002737864704-role','user-all','1607311446916005888-org','1-user','427213412995432449-role','1607311446916005888_1580484002737864704-post')
- rights : 权限的数组,当前用户的可授权信息 eg:分公司、组织、角色、岗位等。当复杂sql场景下可以自行使用rights信息,关联sys_authorization表进行数据过滤
set<String> : ["id-user","id-role","id-org"] ...
5. 修改mapper文件
使用 rightsSql 进行数据表与权限表的关联查询
SELECT DISTINCT bpm_definition.* FROM bpm_definition ${rightsSql}
6.示例
以查询当前用户可以发起的流程列表为例,展示一下sysAuthorizationApi.sysAuthorizationApi 的用法
java
public List<BpmDefinition> getMyDefinitionList(String userId, AbQueryFilter queryFilter,Boolean needHidden) {
// 获取 rightSql
Map map = sysAuthorizationApi.getUserRightsSql(RightsObjectConstants.FLOW, userId, "key_");
DefaultAbQueryFilter filter = (DefaultAbQueryFilter) queryFilter;
filter.getQueryParam().putAll(map);
return bpmDefinitionMapper.getMyDefinitionList(queryFilter);
}
// bpmDefinitionMapper 中拼接 ${rightSql}
<select id="getMyDefinitionList" parameterType="java.util.Map" resultMap="BpmDefinition">
SELECT DISTINCT bpm_definition.* FROM bpm_definition ${rightsSql}
<where>
<if test="whereSql!=null">
${whereSql}
</if>
</where>
</select>
7. 授权表结构
sql
CREATE TABLE `sys_authorization` (
`rights_id_` varchar(64) NOT NULL COMMENT 'ID',
`rights_object_` varchar(64) NOT NULL COMMENT '授权对象表分区用 (业务类型)',
`rights_target_` varchar(64) NOT NULL COMMENT '授权目标ID',
`rights_type_` varchar(64) NOT NULL COMMENT '权限类型',
`rights_identity_` varchar(64) NOT NULL COMMENT '授权标识',
`rights_identity_name_` NOT NULL COMMENT '标识名字',
`rights_permission_code_` NOT NULL COMMENT '授权code=identity+type',
`rights_create_time_` datetime NOT NULL COMMENT '创建时间',
`rights_create_by_` varchar(64) NOT NULL COMMENT '创建人',
PRIMARY KEY (`rights_id_`) USING BTREE,
KEY `idx_permission_code_` (`rights_permission_code_`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='通用资源授权配置';