Commit 2bf04c57 by wangzhen

Refactor the classes of the RBAC to PermissionService.

1 parent 3ee60786
......@@ -2,7 +2,6 @@ package com.myxrk.rbac.aspect;
import com.google.common.base.CaseFormat;
import com.myxrk.rbac.annotation.DataGrid;
import com.myxrk.rbac.po.SysUser;
import com.myxrk.rbac.result.Result;
import com.myxrk.rbac.service.PermissionService;
import lombok.extern.slf4j.Slf4j;
......@@ -39,7 +38,6 @@ public class DataGridMaskAspect {
@Around("@annotation(org.springframework.web.bind.annotation.GetMapping)")
public Object maskData(ProceedingJoinPoint joinPoint) throws Throwable {
// 执行目标方法
Object result = joinPoint.proceed();
// 仅处理Result类型,来源与ResponseBodyAdvice处理之后的结果
......@@ -58,48 +56,49 @@ public class DataGridMaskAspect {
}
// 获取数据表格唯一标识
Method tm = ((MethodSignature) joinPoint.getSignature()).getMethod();
DataGrid dg = tm.getDeclaredAnnotation(DataGrid.class);
DataGrid dg = getDataGridAnnotation(joinPoint);
if (dg == null) {
return result;
}
String dgKey = dg.value();
// 获取当前用户
SysUser sysUser = permissionService.getSysUser();
// 获取当前激活角色,激活的角色只能有一个
Long role = permissionService.getActiveRole();
// 获取当前激活角色所关联的数据表格列
List<String> columns = permissionService.getColumnsByRoleAndDataGridKey(dgKey, role);
maskData(data, columns);
// 更具角色控制DataGrid列的显示
maskData(dg.value(), data);
return result;
}
// 不支持的返回类型, 直接放行
log.warn("Unsupported return type {}", result.getClass());
return result;
}
private static DataGrid getDataGridAnnotation(ProceedingJoinPoint joinPoint) {
Method tm = ((MethodSignature) joinPoint.getSignature()).getMethod();
return tm.getDeclaredAnnotation(DataGrid.class);
}
private static Class<?> getDataEntryType(List<?> data) {
return data.get(0).getClass();
}
private static void maskData(List<?> data, List<String> columns) {
private void maskData(String dgKey, List<?> data) {
// 获取当前激活角色,激活的角色只能有一个
Long role = permissionService.getActiveRole();
// 获取当前激活角色所关联的数据表格列
List<String> columns = permissionService.getColumnsByRoleAndDataGridKey(dgKey, role);
// 获取数据类型
Class<?> genericType = getDataEntryType(data);
// 获取返回值的属性列表
Set<String> header = getTableHeader(genericType);
if (!header.containsAll(columns)) {
log.error("backend data columns doesn't contains all data grid columns, please fix!: {}", columns);
return;
}
// 根据角色屏DataGrid数据列
List<?> masked = data.stream().map(entry -> {
List<String> masks = getMasks(columns, header);
if (!masks.isEmpty()) {
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!