提交 e1d5d8f8 编写于 作者: sq3536's avatar sq3536

重构代码逻辑

上级 fb226095
......@@ -388,17 +388,17 @@
private initTree() {
const _this = this;
// get全部菜单和数据能力和统一资源的请求路径
const url = `sys_permissions/getallMenuAndPermissionAndUnires?roleid=` + _this.srfparentkey;
const url = `sysroles/`+_this.srfparentkey+`/sysrolepermissions/tree`;
this.$http.get(url).then((response: any) => {
if (!response || response.status !== 200) {
this.$Notice.error({title: '错误', desc: response.message});
return;
} else {
// 给树赋值,数据结构在后台已经按照eltree格式化
_this.CDdata = response.data[0];
_this.QXdata = response.data[1];
_this.ZYdata = response.data[2];
_this.defaultCheckedNodes = response.data[3];
_this.CDdata = response.APPMENU;
_this.QXdata = response.OPPRIV;
_this.ZYdata = response.UNIRES;
_this.defaultCheckedNodes = response.SELECTED;
// 设置默认第一级展开
for (let i = 0; i < _this.CDdata.length; i++) {
......@@ -477,8 +477,8 @@
return;
}
// 先删除当前角色的所有角色权限关系
let url = `sys_permissions/deleteRolePermissionByRoleid`;
let param = {roleid: this.srfparentkey};
let url = `sys_permissions/deleteRolePermissionByRoleid`;
let param = {roleid: this.srfparentkey};
this.$http.post(url,param).then((response: any) => {
if (!response || response.status !== 200) {
this.$Notice.error({title: '错误', desc: response.message});
......
package cn.ibizlab.core.extensions.service;
import cn.ibizlab.core.uaa.domain.SYS_ROLE_PERMISSION;
import cn.ibizlab.core.uaa.service.ISYS_PERMISSIONService;
import cn.ibizlab.core.uaa.service.ISYS_PSAPPMENUITEMService;
import cn.ibizlab.core.uaa.service.ISYS_ROLE_PERMISSIONService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.validation.constraints.NotBlank;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@Service
@Slf4j
public class UAACoreService {
@Autowired
private ISYS_PERMISSIONService isys_permissionService;
@Autowired
private ISYS_PSAPPMENUITEMService isys_psappmenuitemService;
@Autowired
private ISYS_ROLE_PERMISSIONService isys_role_permissionService;
/**
* 获取应用菜单
*
* @return
*/
public JSONArray getAppMenu() {
// 用户所在系统id,R7的AuthenticationUser中已经没有systemid了
// String systemid= AuthenticationUser.getAuthenticationUser().getSystemid();
StringBuilder nPermissionSQL = new StringBuilder();
nPermissionSQL.append("SELECT ");
nPermissionSQL.append(" t.SYS_PERMISSIONID as sys_permissionid, ");
nPermissionSQL.append(" t.SYS_PERMISSIONNAME as sys_permissionname, ");
// nPermissionSQL.append(" t1.PERMISSIONID as permissionid, ");
nPermissionSQL.append(" t1.PSAPPMENUITEMID as permissionid, ");
// nPermissionSQL.append(" t1.P_PERMISSIONID as p_permissionid, ");
nPermissionSQL.append(" t1.PSAPPPMENUITEMID as p_permissionid, ");
nPermissionSQL.append(" t1.PSAPPID as psappid, ");
nPermissionSQL.append(" t1.PSAPPNAME as psappname, ");
nPermissionSQL.append(" t1.PSAPPMENUID as psappmenuid, ");
nPermissionSQL.append(" t1.PSAPPMENUNAME as psappmenuname, ");
nPermissionSQL.append(" t1.PSSYSTEMID as systemid ");
nPermissionSQL.append(" FROM IBZPERMISSION t");
nPermissionSQL.append(" INNER JOIN IBZPSAPPMENUITEM t1 ON t.SYS_PERMISSIONID = t1.SYS_PSAPPMENUITEMID and t.enable =1");
List<JSONObject> permissions = isys_psappmenuitemService.select(nPermissionSQL.toString(), null);
// 清空sql,获取应用菜单所处系统
nPermissionSQL.delete(0, nPermissionSQL.length());
nPermissionSQL.append("select temp.systemid from ( ");
nPermissionSQL.append(" SELECT ");
nPermissionSQL.append(" t.SYS_PERMISSIONID as sys_permissionid, ");
nPermissionSQL.append(" t.SYS_PERMISSIONNAME as sys_permissionname, ");
// nPermissionSQL.append(" t1.PERMISSIONID as permissionid, ");
nPermissionSQL.append(" t1.PSAPPMENUITEMID as permissionid, ");
// nPermissionSQL.append(" t1.P_PERMISSIONID as p_permissionid, ");
nPermissionSQL.append(" t1.PSAPPPMENUITEMID as p_permissionid, ");
nPermissionSQL.append(" t1.PSAPPID as psappid, ");
nPermissionSQL.append(" t1.PSAPPNAME as psappname, ");
nPermissionSQL.append(" t1.PSAPPMENUID as psappmenuid, ");
nPermissionSQL.append(" t1.PSAPPMENUNAME as psappmenuname, ");
nPermissionSQL.append(" t1.PSSYSTEMID as systemid ");
nPermissionSQL.append(" FROM IBZPERMISSION t INNER JOIN IBZPSAPPMENUITEM t1 ON t.SYS_PERMISSIONID = t1.SYS_PSAPPMENUITEMID and t.enable =1");
nPermissionSQL.append(" )temp group by temp.systemid");
List<JSONObject> systems = isys_psappmenuitemService.select(nPermissionSQL.toString(), null);
JSONArray treeNode = new JSONArray();
if (permissions.size() > 0 && systems.size() > 0) {
treeNode = this.transferAppMenuToELTree(permissions, systems);
}
return treeNode;
}
/**
* 用于将资源表中菜单数据转换成饿了么树格式数据
*
* @param permissions
* @param systems
* @return
*/
private JSONArray transferAppMenuToELTree(List<JSONObject> permissions, List<JSONObject> systems) {
Map<String, String> appKeyMap = new HashMap<>();
Map<String, String> appMenuKeyMap = new HashMap<>();
JSONObject groupByMenuObj = this.groupByAppMenu(permissions, systems, appKeyMap, appMenuKeyMap);//将数据库数据进行分组
JSONArray elTreeObj = transferAppMenuToELTree(groupByMenuObj, appKeyMap, appMenuKeyMap);//将分组后的数据转换成饿了么树格式数据
return elTreeObj;
}
/**
* 将数据库中的菜单数据进行分组
*
* @param permissions
* @param systems
* @param appKeyMap
* @param appMenuKeyMap
* @return
*/
private JSONObject groupByAppMenu(List<JSONObject> permissions, List<JSONObject> systems, Map<String, String> appKeyMap, Map<String, String> appMenuKeyMap) {
JSONObject permission_system = new JSONObject(); //顶级系统数据
for (JSONObject system : systems) {
String systemid = system.getString("systemid");
JSONObject permission_app = new JSONObject(); //次级应用数据
for (JSONObject obj : permissions) {
String str_app = String.format("IBIZAPP-%s", obj.get("psappid"));
String str_appName = String.format("%s", obj.get("psappname"));
String str_appMenu = String.format("IBIZMENU-%s", obj.get("psappmenuid"));
String str_appMenuName = String.format("%s", obj.get("psappmenuname"));
String str_systemid = String.format("%s", obj.get("systemid"));
// String sys_permissionId = DigestUtils.md5DigestAsHex(String.format("%s%s", systemId, obj.get("permissionid")).getBytes());
String permissionId = String.format("%s", obj.get("permissionid"));
String sys_permissionId = String.format("%s", obj.get("sys_permissionid"));
String p_sys_permissionId = "";
if (!StringUtils.isEmpty(obj.get("p_permissionid"))) {
// p_sys_permissionId = DigestUtils.md5DigestAsHex(String.format("%s%s", systemId, obj.get("p_permissionid")).getBytes());
p_sys_permissionId = String.format("%s", obj.get("p_permissionid"));
}
// 根据systemid进行操作
if (systemid.equals(str_systemid)) {
JSONObject cur_system = new JSONObject();
JSONObject cur_app = new JSONObject();
JSONArray cur_app_menu = new JSONArray();
if (permission_system.containsKey(str_systemid))// 系统合并
cur_system = permission_system.getJSONObject(str_systemid);
if (permission_app.containsKey(str_app))//合并前端应用
cur_app = permission_app.getJSONObject(str_app);
if (cur_app.containsKey(str_appMenu))//合并菜单
cur_app_menu = cur_app.getJSONArray(str_appMenu);
JSONObject permission = new JSONObject();
permission.put("id", permissionId);
permission.put("sys_permissionId", sys_permissionId);
permission.put("pid", p_sys_permissionId);
permission.put("label", obj.get("sys_permissionname"));
cur_app_menu.add(permission);
cur_app.put(str_appMenu, cur_app_menu);
cur_system.put(str_app, cur_app);
permission_app.put(str_app, cur_app);
permission_system.put(str_systemid, cur_system);
// 构造树节点名称集合
if (!appKeyMap.containsKey(str_systemid)) {// 系统
appKeyMap.put(str_systemid, str_systemid);
}
if (!appKeyMap.containsKey(str_app)) {// 应用
appKeyMap.put(str_app, str_appName);
}
if (!appMenuKeyMap.containsKey(str_appMenu)) {// 应用菜单
appMenuKeyMap.put(str_appMenu, str_appMenuName);
}
}
}
}
// return permission_app;
return permission_system;
}
/**
* 将以分组的树节点转换成饿了么格式的树
* 格式为:系统->应用->应用菜单->菜单项
*
* @param sysApps
* @return
*/
private JSONArray transferAppMenuToELTree(JSONObject sysApps, Map<String, String> appKeyMap, Map<String, String> appMenuKeyMap) {
JSONArray appMenuArr = new JSONArray();
Set<String> sysAppkeys = sysApps.keySet();
for (String sysAppkey : sysAppkeys) {
Object appMenu = sysApps.get(sysAppkey);
if (appMenu instanceof JSONObject) {
JSONArray appChildMenuItemArr = transferAppMenuToELTree((JSONObject) appMenu, appKeyMap, appMenuKeyMap); //递归遍历输出下级节点信息
JSONObject appMenuItem = new JSONObject();
appMenuItem.put("id", sysAppkey);
sysAppkey = praseLabel(sysAppkey, appKeyMap, appMenuKeyMap);
appMenuItem.put("label", sysAppkey);
appMenuItem.put("children", appChildMenuItemArr);
appMenuArr.add(appMenuItem);
} else {
if (appMenu instanceof JSONArray) {
JSONArray appMenuItemArr = sysApps.getJSONArray(sysAppkey);
JSONObject appMenuItem = new JSONObject();
appMenuItem.put("id", sysAppkey);
sysAppkey = praseLabel(sysAppkey, appKeyMap, appMenuKeyMap);
appMenuItem.put("label", sysAppkey);
appMenuItem.put("children", getTreesData(appMenuItemArr, ""));
appMenuArr.add(appMenuItem);
}
}
}
return appMenuArr;
}
/**
* 递归遍历树节点
*
* @param PermissionNodes
* @param parentId
* @return
*/
private JSONArray getTreesData(JSONArray PermissionNodes, Object parentId) {
JSONArray treeDatas = new JSONArray();
for (int a = 0; a < PermissionNodes.size(); a++) {
JSONObject PermissionNode = PermissionNodes.getJSONObject(a);
String p_permissionId = PermissionNode.getString("pid");
if (StringUtils.isEmpty(p_permissionId)) {
p_permissionId = "";
}
if (parentId.equals(p_permissionId)) {
JSONArray childCodeItem = getTreesData(PermissionNodes, PermissionNode.getString("id"));
if (childCodeItem.size() > 0) {
PermissionNode.put("children", childCodeItem);
}
treeDatas.add(PermissionNode);
}
}
return treeDatas;
}
/**
* 拿到带有IBIZAPP-或IBIZMENU-标识的key把标记移除
*/
private String praseLabel(String key, Map<String, String> appKeyMap, Map<String, String> appMenuKeyMap) {
if (key.startsWith("IBIZAPP-")) {
if (appKeyMap.containsKey(key)) {
key = appKeyMap.get(key);
}
key = key.replace("IBIZAPP-", "");
}
if (key.startsWith("IBIZMENU-")) {
if (appMenuKeyMap.containsKey(key)) {
key = appMenuKeyMap.get(key);
}
key = key.replace("IBIZMENU-", "");
}
return key;
}
/**
* 获取数据能力
*
* @return
*/
public JSONArray getDEOppriv() {
JSONArray treeNode = new JSONArray();
StringBuilder permissionsSql = new StringBuilder();
permissionsSql.append("select ");
permissionsSql.append(" t.SYS_PERMISSIONID as sys_permissionid, ");
permissionsSql.append(" t.SYS_PERMISSIONNAME as sys_permissionname, ");
permissionsSql.append(" t1.PSSYSMODULEID as pssysmoduleid, ");
permissionsSql.append(" t1.PSSYSMODULENAME as pssysmodulename, ");
permissionsSql.append(" t1.PSDATAENTITYID as psdataentityid, ");
permissionsSql.append(" t1.PSDATAENTITYNAME as psdataentityname, ");
permissionsSql.append(" t1.Pssourceid as pssourceid, ");
permissionsSql.append(" t1.Pssourcename as pssourcename,");
permissionsSql.append(" t1.PSDEDATARANGEID as psdedatarangeid, ");
permissionsSql.append(" t1.PSDEDATARANGENAME as psdedatarangename,");
permissionsSql.append(" t1.PSSYSTEMID as systemid ");
permissionsSql.append(" FROM IBZPERMISSION t INNER JOIN IBZPSDEOPPRIV t1 ON t.SYS_PERMISSIONID = t1.SYS_PSDEOPPRIVID and t.enable=1");
List<JSONObject> permissions = isys_permissionService.select(permissionsSql.toString(), null);
// 清空sql,获取数据能力所处系统
permissionsSql.delete(0, permissionsSql.length());
permissionsSql.append("select temp.systemid from ( ");
permissionsSql.append(" select ");
permissionsSql.append(" t.SYS_PERMISSIONID as sys_permissionid, ");
permissionsSql.append(" t.SYS_PERMISSIONNAME as sys_permissionname, ");
permissionsSql.append(" t1.PSSYSMODULEID as pssysmoduleid, ");
permissionsSql.append(" t1.PSSYSMODULENAME as pssysmodulename, ");
permissionsSql.append(" t1.PSDATAENTITYID as psdataentityid, ");
permissionsSql.append(" t1.PSDATAENTITYNAME as psdataentityname, ");
permissionsSql.append(" t1.Pssourceid as pssourceid, ");
permissionsSql.append(" t1.Pssourcename as pssourcename,");
permissionsSql.append(" t1.PSDEDATARANGEID as psdedatarangeid, ");
permissionsSql.append(" t1.PSDEDATARANGENAME as psdedatarangename,");
permissionsSql.append(" t1.PSSYSTEMID as systemid ");
permissionsSql.append(" FROM IBZPERMISSION t INNER JOIN IBZPSDEOPPRIV t1 ON t.SYS_PERMISSIONID = t1.SYS_PSDEOPPRIVID and t.enable=1");
permissionsSql.append(" )temp group by temp.systemid");
List<JSONObject> systems = isys_permissionService.select(permissionsSql.toString(), null);
if (permissions.size() > 0 && systems.size() > 0) {
treeNode = this.transferDataCapabilityToELTree(permissions, systems);
}
return treeNode;
}
/**
* 用于将资源表中数据能力数据转换成饿了么树格式数据
*
* @param permissions
* @param systems
* @return
*/
public JSONArray transferDataCapabilityToELTree(List<JSONObject> permissions, List<JSONObject> systems) {
Map<String, String> opprivTreeNameMap = new HashMap<>();
JSONObject groupByMenuObj = groupByDataCapability(permissions, systems, opprivTreeNameMap);//将数据库数据进行分组
JSONArray elTreeObj = transferDataCapabilityToELTree(groupByMenuObj, opprivTreeNameMap);//将分组后的数据转换成饿了么树格式数据
return elTreeObj;
}
/**
* 将数据库中的数据能力数据进行分组
* 格式为:系统->模块->实体->数据集/实体行为->数据能力
*
* @param permissions
* @param systems
* @return
*/
private JSONObject groupByDataCapability(List<JSONObject> permissions, List<JSONObject> systems, Map<String, String> opprivTreeNameMap) {
JSONObject permission_system = new JSONObject(); //顶级系统数据
for (JSONObject system : systems) {
String systemid = system.getString("systemid");
JSONObject permission_moudle = new JSONObject(); //次级模块数据
for (JSONObject obj : permissions) {
JSONObject jobj = new JSONObject();
jobj.putAll(obj);
String str_systemid = jobj.getString("systemid");// 系统标识
String str_moudle = jobj.getString("pssysmoduleid");// 系统模块标识
String str_moudle_name = jobj.getString("pssysmodulename");// 系统模块名称
String str_entity = jobj.getString("psdataentityid");// 实体标识
String str_entity_name = jobj.getString("psdataentityname");// 实体名称
String str_dataset = jobj.getString("pssourceid");// 数据集,实体行为标识
String str_dataset_name = jobj.getString("pssourcename");// 数据集,实体行为名称
// String str_datarange = jobj.getString("psdedatarangeid");// 实体数据范围标识
// String str_datarange_name = jobj.getString("psdedatarangename");// 实体数据范围名称
String str_permissionid = jobj.getString("sys_permissionid");// 实体数据操作名称
String str_permissionname = jobj.getString("sys_permissionname");// 实体数据操作标识
// 根据systemid进行操作
if (systemid.equals(str_systemid)) {
JSONObject cur_system = new JSONObject();
JSONObject cur_moudle = new JSONObject();
JSONObject cur_entity = new JSONObject();
// JSONObject cur_dataset = new JSONObject();
JSONArray cur_dataset = new JSONArray();
// JSONArray cur_data_range = new JSONArray();
if (permission_system.containsKey(str_systemid))// 系统合并
cur_system = permission_system.getJSONObject(str_systemid);
if (permission_moudle.containsKey(str_moudle))//模块合并
cur_moudle = permission_moudle.getJSONObject(str_moudle);
if (cur_moudle.containsKey(str_entity))//实体合并
cur_entity = cur_moudle.getJSONObject(str_entity);
if (cur_entity.containsKey(str_dataset))//数据集,实体行为合并
cur_dataset = cur_entity.getJSONArray(str_dataset);
// if (cur_dataset.containsKey(str_datarange))//数据范围合并
// cur_data_range = cur_dataset.getJSONArray(str_datarange);
JSONObject permission = new JSONObject();
permission.put("id", str_permissionid);
permission.put("label", str_permissionname);
// cur_data_range.add(permission);
//
// cur_dataset.put(str_datarange, cur_data_range);
cur_dataset.add(permission);
cur_entity.put(str_dataset, cur_dataset);
cur_moudle.put(str_entity, cur_entity);
cur_system.put(str_moudle, cur_moudle);
permission_moudle.put(str_moudle, cur_moudle);
permission_system.put(str_systemid, cur_system);
//构造树节点名称集合
if (!opprivTreeNameMap.containsKey(str_systemid)) {// 系统
opprivTreeNameMap.put(str_systemid, str_systemid);
}
if (!opprivTreeNameMap.containsKey(str_moudle)) {// 模块
opprivTreeNameMap.put(str_moudle, str_moudle_name);
}
if (!opprivTreeNameMap.containsKey(str_entity)) {// 实体
opprivTreeNameMap.put(str_entity, str_entity_name);
}
if (!opprivTreeNameMap.containsKey(str_dataset)) {// 数据集,实体行为
opprivTreeNameMap.put(str_dataset, str_dataset_name);
}
// if (!opprivTreeNameMap.containsKey(str_datarange_name)) {// 数据范围
// opprivTreeNameMap.put(str_datarange, str_datarange_name);
// }
}
}
}
// return permission_moudle;
return permission_system;
}
/**
* 权限树递归
*
* @param childNode
* @return
*/
private JSONArray transferDataCapabilityToELTree(JSONObject childNode, Map<String, String> opprivTreeNameMap) {
JSONArray array = new JSONArray();
Set<String> keys = childNode.keySet();
for (String key : keys) {
Object obj = childNode.get(key);
if (obj instanceof JSONObject) {
JSONArray childArr = transferDataCapabilityToELTree(childNode.getJSONObject(key), opprivTreeNameMap); //递归遍历输出下级节点信息
JSONObject childNodeObj = new JSONObject();
childNodeObj.put("id", key);
childNodeObj.put("label", opprivTreeNameMap.get(key));
childNodeObj.put("children", childArr);
array.add(childNodeObj);
} else {
if (obj instanceof JSONArray) {
JSONArray permissionArr = new JSONArray();
JSONArray jsonArray = childNode.getJSONArray(key);
for (int a = 0; a < jsonArray.size(); a++) { //最后一层
JSONObject permissionObj = jsonArray.getJSONObject(a);
JSONObject transPermissionObj = new JSONObject();
transPermissionObj.put("id", permissionObj.getString("id"));
transPermissionObj.put("label", permissionObj.getString("label"));
permissionArr.add(transPermissionObj);
}
JSONObject childNodeObj = new JSONObject();
childNodeObj.put("id", key);
childNodeObj.put("label", opprivTreeNameMap.get(key));
childNodeObj.put("children", permissionArr);
array.add(childNodeObj);
}
}
}
return array;
}
/**
* 获取统一资源
*
* @return
*/
public JSONArray getUnires() {
JSONArray treeNode = new JSONArray();
StringBuilder permissionsSql = new StringBuilder();
permissionsSql.append("select ");
permissionsSql.append(" t.SYS_PERMISSIONID as sys_permissionid, ");
permissionsSql.append(" t.SYS_PERMISSIONNAME as sys_permissionname, ");
permissionsSql.append(" t1.SYS_PSSYSUNIRESID as uniresid, ");
permissionsSql.append(" t1.SYS_PSSYSUNIRESNAME as uniresname, ");
permissionsSql.append(" t1.UNIRESCODE as unirescode,");
permissionsSql.append(" t.SYSTEMID as systemid ");
permissionsSql.append(" FROM ibzpermission t INNER JOIN IBZPSSYSUNIRES t1 ON t.SYS_PERMISSIONID = t1.SYS_PSSYSUNIRESID and t.enable=1");
List<JSONObject> permissions = isys_permissionService.select(permissionsSql.toString(), null);
// 清空sql,获取统一资源所处系统
permissionsSql.delete(0, permissionsSql.length());
permissionsSql.append("select temp.systemid from ( ");
permissionsSql.append(" select ");
permissionsSql.append(" t.SYS_PERMISSIONID as sys_permissionid, ");
permissionsSql.append(" t.SYS_PERMISSIONNAME as sys_permissionname, ");
permissionsSql.append(" t1.SYS_PSSYSUNIRESID as uniresid, ");
permissionsSql.append(" t1.SYS_PSSYSUNIRESNAME as uniresname, ");
permissionsSql.append(" t1.UNIRESCODE as unirescode, ");
permissionsSql.append(" t.SYSTEMID as systemid ");
permissionsSql.append(" FROM ibzpermission t INNER JOIN IBZPSSYSUNIRES t1 ON t.SYS_PERMISSIONID = t1.SYS_PSSYSUNIRESID and t.enable=1");
permissionsSql.append(" )temp group by temp.systemid");
List<JSONObject> systems = isys_permissionService.select(permissionsSql.toString(), null);
if (permissions.size() > 0 && systems.size() > 0) {
treeNode = this.transferDataUniresToELTree(permissions, systems);
}
return treeNode;
}
/**
* 用于将资源表中统一资源数据转换成饿了么树格式数据
*
* @param permissions
* @param systems
* @return
*/
private JSONArray transferDataUniresToELTree(List<JSONObject> permissions, List<JSONObject> systems) {
Map<String, String> uniresTreeNameMap = new HashMap<>();
JSONObject groupByUniresObj = groupByDataUnires(permissions, systems, uniresTreeNameMap);//将数据库数据进行分组
JSONArray elTreeObj = transferDataUniresToELTree(groupByUniresObj, uniresTreeNameMap);//将分组后的数据转换成饿了么树格式数据
return elTreeObj;
}
/**
* 将数据库中的数据能力数据进行分组
* 格式为:系统->统一资源
*
* @param permissions
* @param systems
* @param uniresTreeNameMap
* @return
*/
private JSONObject groupByDataUnires(List<JSONObject> permissions, List<JSONObject> systems, Map<String, String> uniresTreeNameMap) {
JSONObject permission_system = new JSONObject(); //顶级系统数据
for (JSONObject system : systems) {
String systemid = system.getString("systemid");
for (JSONObject obj : permissions) {
JSONObject jobj = new JSONObject();
jobj.putAll(obj);
String str_systemid = jobj.getString("systemid");// 系统标识
String str_uniresid = jobj.getString("uniresid");// 统一资源标识
String str_uniresname = jobj.getString("uniresname");// 统一资源名称
String str_unirescode = jobj.getString("unirescode");// 资源代码
String str_permissionid = jobj.getString("sys_permissionid");// 实体数据操作名称
String str_permissionname = jobj.getString("sys_permissionname");// 实体数据操作标识
// 根据systemid进行操作
if (systemid.equals(str_systemid)) {
JSONArray cur_system = new JSONArray();
if (permission_system.containsKey(str_systemid))// 系统合并
cur_system = permission_system.getJSONArray(str_systemid);
JSONObject cur_unires = new JSONObject();
cur_unires.put("id", str_permissionid);
cur_unires.put("label", str_permissionname);
cur_system.add(cur_unires);
permission_system.put(str_systemid, cur_system);
//构造树节点名称集合
if (!uniresTreeNameMap.containsKey(str_systemid)) {// 系统
uniresTreeNameMap.put(str_systemid, str_systemid);
}
if (!uniresTreeNameMap.containsKey(str_uniresid)) {// 资源
uniresTreeNameMap.put(str_uniresid, str_uniresname);
}
}
}
}
return permission_system;
}
/**
* 权限树递归
*
* @param childNode
* @param uniresTreeNameMap
* @return
*/
private JSONArray transferDataUniresToELTree(JSONObject childNode, Map<String, String> uniresTreeNameMap) {
JSONArray array = new JSONArray();
Set<String> keys = childNode.keySet();
for (String key : keys) {
Object obj = childNode.get(key);
if (obj instanceof JSONObject) {
JSONArray childArr = transferDataCapabilityToELTree(childNode.getJSONObject(key), uniresTreeNameMap); //递归遍历输出下级节点信息
JSONObject childNodeObj = new JSONObject();
childNodeObj.put("id", key);
childNodeObj.put("label", uniresTreeNameMap.get(key));
childNodeObj.put("children", childArr);
array.add(childNodeObj);
} else {
if (obj instanceof JSONArray) {
JSONArray permissionArr = new JSONArray();
JSONArray jsonArray = childNode.getJSONArray(key);
for (int a = 0; a < jsonArray.size(); a++) { //最后一层
JSONObject permissionObj = jsonArray.getJSONObject(a);
JSONObject transPermissionObj = new JSONObject();
transPermissionObj.put("id", permissionObj.getString("id"));
transPermissionObj.put("label", permissionObj.getString("label"));
permissionArr.add(transPermissionObj);
}
JSONObject childNodeObj = new JSONObject();
childNodeObj.put("id", key);
childNodeObj.put("label", uniresTreeNameMap.get(key));
childNodeObj.put("children", permissionArr);
array.add(childNodeObj);
}
}
}
return array;
}
/**
* 根据角色id查询所有权限
* @return
* @param roleid
*/
public JSONArray getallPermissionByRoleid(@NotBlank(message = "roleid不允许为空") String roleid) {
JSONArray rolepermission = new JSONArray();
StringBuilder sql = new StringBuilder();
sql.append("select t.SYS_PERMISSIONID as permissionid,t.SYS_PERMISSIONNAME as permissionname,t1.PERMISSIONTYPE as permissiontype from ibzrole_permission t inner join ibzpermission t1 on t.SYS_PERMISSIONID=t1.SYS_PERMISSIONID where t1.enable='1' and t.sys_roleid='"+ roleid +"'");
List<JSONObject> select = isys_permissionService.select(sql.toString(),null);
for (JSONObject obj : select) {
String permissionid = obj.getString("permissionid");
String permissionname = obj.getString("permissionname");
String permissiontype = obj.getString("permissiontype");
JSONObject childNodeObj = new JSONObject();
// 应用菜单需要对权限id进行处理
if ("APPMENU".equals(permissiontype)){
String appmenu_permissionid = permissionid.substring(permissionid.lastIndexOf("-")+1, permissionid.length());
childNodeObj.put("id", appmenu_permissionid);
}else{
// 不是则填充权限id
childNodeObj.put("id", permissionid);
}
childNodeObj.put("label", permissionname);
rolepermission.add(childNodeObj);
}
return rolepermission;
}
/**
* 根据角色id删除角色权限关系
* @param roleid
*/
public void clearRolePermissionByRoleid(String roleid) {
isys_role_permissionService.removeByRoleid(roleid);
}
/**
* 根据角色id保存选中的权限信息
* @param roleid
* @param checkedNodes
*/
public void saveRolePermissionByRoleid(String roleid, JSONArray checkedNodes) {
for (int i = 0; i < checkedNodes.size(); i++) {
JSONObject obj = checkedNodes.getJSONObject(i);
SYS_ROLE_PERMISSION rolePermission = new SYS_ROLE_PERMISSION();
rolePermission.setRoleid(roleid);
rolePermission.setPermissionid(obj.getString("sys_permissionid"));
isys_role_permissionService.save(rolePermission);
}
}
}
......@@ -7,7 +7,10 @@ import java.util.Map;
import java.math.BigInteger;
import java.util.HashMap;
import java.math.BigDecimal;
import cn.ibizlab.core.uaa.extensions.domain.SysStructure;
import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
......@@ -24,7 +27,7 @@ import org.springframework.data.annotation.Transient;
import com.baomidou.mybatisplus.annotation.*;
import cn.ibizlab.util.domain.EntityMP;
import org.springframework.util.StringUtils;
/**
* 实体[实体]
......@@ -53,10 +56,10 @@ public class SysPSSystem extends EntityMP implements Serializable {
/**
* 结构
*/
@TableField(value = "sysstructure")
@TableField(value = "sysstructure",typeHandler = JacksonTypeHandler.class)
@JSONField(name = "sysstructure")
@JsonProperty("sysstructure")
private String sysstructure;
private SysStructure sysstructure;
......@@ -70,11 +73,21 @@ public class SysPSSystem extends EntityMP implements Serializable {
/**
* 设置 [结构]
*/
public void setSysstructure(String sysstructure){
public void setSysstructure(SysStructure sysstructure){
this.sysstructure = sysstructure ;
this.modify("sysstructure",sysstructure);
}
public SysStructure getSysstructure()
{
if (this.sysstructure!=null )
{
if (!StringUtils.isEmpty(this.getPssystemid()))
this.sysstructure.setSystemid(this.getPssystemid());
}
return this.sysstructure;
}
}
package cn.ibizlab.core.uaa.extensions.domain;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class PermissionNode
{
private String id;
private String label;
private String systemid;
private List<PermissionNode> children = new ArrayList<>();
private String fullName;
private PermissionType type;
public PermissionNode setUniKey(String systemid,String id)
{
this.systemid=systemid;
this.id=systemid+"-"+id;
return this;
}
public List<PermissionNode> getChildren()
{
if(children == null)
children = new ArrayList<>();
return children;
}
}
package cn.ibizlab.core.uaa.extensions.domain;
public enum PermissionType
{
OPPRIV,UNIRES,APPMENU
}
package cn.ibizlab.core.uaa.extensions.domain.Structure;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class AppNode
{
private String appid;
private String appname;
@JsonProperty("appmenu")
@JSONField(name = "appmenu")
private List<MenuNode> appmenus;
}
package cn.ibizlab.core.uaa.extensions.domain.Structure;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class EntityNode
{
private String dename;
private String delogicname;
@JsonProperty("sysmoudle")
@JSONField(name = "sysmoudle")
private FuncItem moudle;
@JsonProperty("dedataset")
@JSONField(name = "dedataset")
private List<FuncItem> dataSets;
@JsonProperty("deaction")
@JSONField(name = "deaction")
private List<FuncItem> actions;
@JsonProperty("datascope")
@JSONField(name = "datascope")
private List<FuncItem> scopes;
}
package cn.ibizlab.core.uaa.extensions.domain.Structure;
import lombok.Data;
import java.util.List;
@Data
public class FuncItem
{
private String id;
private String name;
private String type;
private List<FuncItem> items;
}
package cn.ibizlab.core.uaa.extensions.domain.Structure;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@Data
public class MenuNode
{
private String menuid;
private String menuname;
@JsonProperty("menuitem")
@JSONField(name = "menuitem")
private List<FuncItem> menuitems;
}
package cn.ibizlab.core.uaa.extensions.domain.Structure;
import lombok.Data;
@Data
public class UniResNode
{
private String unirescode;
private String uniresname;
}
package cn.ibizlab.core.uaa.extensions.domain;
import cn.ibizlab.core.uaa.extensions.domain.Structure.AppNode;
import cn.ibizlab.core.uaa.extensions.domain.Structure.EntityNode;
import cn.ibizlab.core.uaa.extensions.domain.Structure.FuncItem;
import cn.ibizlab.core.uaa.extensions.domain.Structure.UniResNode;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.*;
@Data
public class SysStructure
{
private String systemid;
private List<EntityNode> entities;
@JsonProperty("unires")
@JSONField(name = "unires")
private List<UniResNode> uniResIds;
@JsonProperty("appmenus")
@JSONField(name = "appmenus")
private List<AppNode> apps;
public PermissionNode getPermissionTree(PermissionType type)
{
PermissionNode root = PermissionNode.builder().id(systemid).label(systemid).systemid(systemid).build();
switch (type)
{
case OPPRIV:
Map<String,PermissionNode> moudlemap = new LinkedHashMap<>();
PermissionNode emptyMoudle = PermissionNode.builder().label("未分类模块").build().setUniKey(systemid,"Ungroup");
for(EntityNode node:this.entities) {
PermissionNode moudle = null;
if(node.getMoudle()!=null ) {
if (moudlemap.containsKey(systemid+"-"+node.getMoudle().getId()))
moudle = moudlemap.get(systemid+"-"+node.getMoudle().getId());
else {
moudle = PermissionNode.builder()
.label(node.getMoudle().getName()).build()
.setUniKey(systemid,node.getMoudle().getId());
moudlemap.put(moudle.getId(),moudle);
}
}
else {
moudle = emptyMoudle;
moudlemap.put("Ungroup",moudle);
}
PermissionNode enode = PermissionNode.builder()
.label(node.getDelogicname()).build()
.setUniKey(systemid,node.getDename());
moudle.getChildren().add(enode);
if(node.getDataSets()!=null)
node.getDataSets().forEach(dataset->{
String datasetname=dataset.getName();
if(datasetname.toUpperCase().equals("DEFAULT"))
datasetname="";
datasetname="查询"+datasetname+"数据";
PermissionNode dataSetNode = PermissionNode.builder()
.label(datasetname).build()
.setUniKey(systemid,enode.getId()+"-"+dataset.getId()+"-all");
enode.getChildren().add(dataSetNode);
});
if(node.getActions()!=null) {
node.getActions().forEach(action -> {
String actionname = action.getName();
if (action.getId().toUpperCase().equals("CREATE"))
actionname = "新建";
else if (action.getId().toUpperCase().equals("UPDATE"))
actionname = "修改";
else if (action.getId().toUpperCase().equals("REMOVE"))
actionname = "删除";
else if (action.getId().toUpperCase().equals("SAVE"))
actionname = "保存";
else if (action.getId().toUpperCase().equals("GET"))
actionname = "查看";
else if (action.getId().toUpperCase().equals("CHECKKEY") || action.getId().toUpperCase().equals("GETDRAFT") || action.getId().toUpperCase().indexOf("BATCH") > 0)
return;
if (node.getScopes() == null || node.getScopes().size() <= 1) {
String fullname = systemid+"/操作能力/"+enode.getLabel()+"/"+actionname+"任意数据";
enode.getChildren().add(
PermissionNode.builder()
.label(actionname).type(PermissionType.OPPRIV)
.fullName(fullname).build()
.setUniKey(systemid, enode.getId() + "-" + action.getId() + "-all"));
}
else {
PermissionNode actionNode = PermissionNode.builder()
.label(actionname).build()
.setUniKey(systemid, enode.getId() + "-" + action.getId());
final String preFullname = systemid+"/操作能力/"+enode.getLabel()+"/"+actionname;
node.getScopes().forEach(scope -> {
String scopename = scope.getName();
if (scope.getId().equals("all"))
scopename = "任意数据";
else if (scope.getId().equals("createman")) {
if (action.getId().toUpperCase().equals("CREATE"))
return;
scopename = "本人创建的数据";
}
else if (scope.getId().equals("curorg"))
scopename = "本单位的数据";
else if (scope.getId().equals("curorgdept"))
scopename = "本部门的数据";
else if (scope.getId().equals("sorg"))
scopename = "本单位及下辖全部单位数据";
else if (scope.getId().equals("curorgdept"))
scopename = "本部门及下辖部门的数据";
else
return;
actionNode.getChildren().add(
PermissionNode.builder()
.label(scopename).type(PermissionType.OPPRIV)
.fullName(preFullname+scopename).build()
.setUniKey(systemid, enode.getId() + "-" + action.getId() + "-" + scope.getId()));
});
enode.getChildren().add(actionNode);
}
});
}
}
moudlemap.values().forEach(moudle->root.getChildren().add(moudle));
break;
case UNIRES:
if(this.getUniResIds()!=null)
{
this.getUniResIds().forEach(uniRes->{
root.getChildren().add(PermissionNode.builder()
.label(uniRes.getUniresname()).type(PermissionType.UNIRES)
.fullName(systemid+"/自定义资源/"+uniRes.getUniresname()).build()
.setUniKey(systemid, uniRes.getUnirescode()));
});
}
break;
case APPMENU:
if(this.getApps()!=null)
{
this.getApps().forEach(app->{
PermissionNode appNode = PermissionNode.builder()
.label("应用-"+app.getAppname()).build()
.setUniKey(systemid, app.getAppid());
if(app.getAppmenus()!=null)
{
app.getAppmenus().forEach(appmenu->{
PermissionNode appMenuNode = PermissionNode.builder()
.label("菜单-"+appmenu.getMenuname()).build()
.setUniKey(systemid, appmenu.getMenuid());
if(appmenu.getMenuitems()!=null)
{
appmenu.getMenuitems().forEach(item->{
appMenuNode.getChildren().add(loopMenuItem(appmenu.getMenuid(),systemid+"/菜单/"+app.getAppname()+appmenu.getMenuname(),item));
});
}
appNode.getChildren().add(appMenuNode);
});
}
root.getChildren().add(appNode);
});
}
break;
}
return root;
}
private PermissionNode loopMenuItem(String menuId,String fullName,FuncItem item)
{
fullName=fullName+"/"+item.getName();
PermissionNode itemNode = PermissionNode.builder().label(item.getName()).fullName(fullName).type(PermissionType.APPMENU).build().setUniKey(systemid,menuId+"-"+item.getId());
if(item.getItems()!=null)
{
final String fname=fullName;
item.getItems().forEach(sub->{
itemNode.getChildren().add(loopMenuItem(menuId,fname,sub));
});
}
return itemNode;
}
}
package cn.ibizlab.core.uaa.extensions.service;
import cn.ibizlab.core.uaa.domain.SysPSSystem;
import cn.ibizlab.core.uaa.domain.SysRolePermission;
import cn.ibizlab.core.uaa.extensions.domain.PermissionNode;
import cn.ibizlab.core.uaa.extensions.domain.PermissionType;
import cn.ibizlab.core.uaa.filter.SysPSSystemSearchContext;
import cn.ibizlab.core.uaa.service.ISysPSSystemService;
import cn.ibizlab.core.uaa.service.ISysRolePermissionService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.*;
@Service
@Slf4j
public class UAACoreService {
@Autowired
private ISysPSSystemService sysPSSystemService;
@Autowired
private ISysRolePermissionService rolePermissionService;
public Map<String,List<PermissionNode>> getPermissionTree()
{
List<PermissionNode> apps = new ArrayList<>();
List<PermissionNode> uniResIds = new ArrayList<>();
List<PermissionNode> oppirvs = new ArrayList<>();
Page<SysPSSystem> page = sysPSSystemService.searchDefault(new SysPSSystemSearchContext());
page.getContent().forEach(system->{
if(system.getSysstructure()==null)
return;
apps.add(system.getSysstructure().getPermissionTree(PermissionType.APPMENU));
uniResIds.add(system.getSysstructure().getPermissionTree(PermissionType.UNIRES));
oppirvs.add(system.getSysstructure().getPermissionTree(PermissionType.OPPRIV));
});
Map<String,List<PermissionNode>> map = new HashMap<>();
map.put(PermissionType.APPMENU.toString(),apps);
map.put(PermissionType.UNIRES.toString(),uniResIds);
map.put(PermissionType.OPPRIV.toString(),oppirvs);
return map;
}
public List<PermissionNode> getRolePermissionByRoleId(String roleId)
{
List<PermissionNode> rolePermissions = new ArrayList<>();
List<SysRolePermission> list = rolePermissionService.selectByRoleid(roleId);
list.forEach(item->{
rolePermissions.add(PermissionNode.builder().id(item.getPermissionid()).label(item.getPermissionname()).build());
});
return rolePermissions;
}
}
......@@ -8,8 +8,9 @@
<!--通过mybatis将查询结果注入到entity中,通过配置autoMapping="true"由mybatis自动处理映射关系 -->
<resultMap id="SysPSSystemResultMap" type="cn.ibizlab.core.uaa.domain.SysPSSystem" autoMapping="true">
<id property="pssystemid" column="pssystemid" /><!--主键字段映射-->
<result column="sysstructure" jdbcType="VARCHAR" property="sysstructure" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
</resultMap>
......
package cn.ibizlab.api.rest.extensions;
import cn.ibizlab.core.uaa.service.ISYS_PERMISSIONService;
import cn.ibizlab.core.uaa.service.ISysPermissionService;
import cn.ibizlab.util.client.IBZOUFeignClient;
import cn.ibizlab.util.security.AuthTokenUtil;
import cn.ibizlab.util.security.AuthenticationInfo;
......@@ -57,7 +57,7 @@ public class ClientAuthenticationResource
private IBZOUFeignClient ouFeignClient;
@Autowired
private ISYS_PERMISSIONService permissionService;
private ISysPermissionService permissionService;
@PostMapping(value = "v7/login")
public ResponseEntity<AuthenticationInfo> login(@Validated @RequestBody AuthorizationLogin authorizationLogin){
......
package cn.ibizlab.api.rest.extensions;
import cn.ibizlab.core.uaa.domain.SYS_PERMISSION;
import cn.ibizlab.core.uaa.domain.SYS_PSAPPMENUITEM;
import cn.ibizlab.core.uaa.domain.SYS_PSDEOPPRIV;
import cn.ibizlab.core.uaa.domain.SYS_PSSYSUNIRES;
import cn.ibizlab.core.uaa.service.ISYS_PERMISSIONService;
import cn.ibizlab.core.uaa.service.ISYS_PSAPPMENUITEMService;
import cn.ibizlab.core.uaa.service.ISYS_PSDEOPPRIVService;
import cn.ibizlab.core.uaa.service.ISYS_PSSYSUNIRESService;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.sql.Timestamp;
import java.util.*;
/**
* 为业务系统提供权限相关服务
* 提供以下能力:
* (1)返回用户权限数据(含菜单、表格、表单)
* (2)业务系统权限数据初始化(含菜单、数据能力):保存业务系统权限数据到UAA中,用于权限树展示
*/
@RestController
public class PermissionFeignService {
/**
* 实体操作标识
*/
private String OPPriTag="OPPRIV";
/**
* 统一资源标识
*/
private String UniResTag="UNIRES";
/**
* 菜单项标识
*/
private String AppMenuTag="APPMENU";
/**
* 实体行为操作标识
*/
private String DEActionType="DEACTION";
/**
* 实体数据集操作标识
*/
private String DataSetTag="DATASET";
@Autowired
private ISYS_PERMISSIONService permissionService;
@Autowired
private ISYS_PSDEOPPRIVService opprivService;
@Autowired
private ISYS_PSSYSUNIRESService pssysuniresService;
@Autowired
private ISYS_PSAPPMENUITEMService psappmenuitemService;
/**
* 拿到业务系统传过来的权限和菜单数据,存入uaa的权限表中
*/
@PostMapping("/uaa/permission/save")
public JSONObject pushSystemPermissionData(@RequestBody Map<String,Object> map, @Validated @NotBlank(message = "systemid不允许为空")@RequestParam("systemid")String systemId){
try {
//如果map值不为null说明要更新数据,则先将表中该系统标识下的所有数据进行逻辑删除
Map param=new HashMap();
param.put("param0",systemId);
String sql="UPDATE ibzpermission t SET t.enable=0 WHERE SYSTEMID=#{et.param0} ";
if(map!=null){
permissionService.execute(sql,param);
}
List<SYS_PSDEOPPRIV> datarange_list=new ArrayList<>();//数据能力
List<SYS_PERMISSION> permission_list=new ArrayList<>();//资源
List<SYS_PSSYSUNIRES> unires_list=new ArrayList<>();//统一资源
List<SYS_PSAPPMENUITEM> menu_list=new ArrayList<>();//资源-菜单项集合
if(map.containsKey("permission")){
JSONObject paramsObj = new JSONObject(map);
JSONObject permissionObj = paramsObj.getJSONObject("permission");
parseDataRange(permissionObj,systemId,permission_list,datarange_list);
parseUniRes(permissionObj,systemId,permission_list,unires_list);
parseAppMenus(permissionObj,systemId,permission_list,menu_list);
}
if(datarange_list.size()>0){
opprivService.saveOrUpdateBatch(datarange_list);//批量保存数据能力
}
if(unires_list.size()>0){
pssysuniresService.saveOrUpdateBatch(unires_list);//批量保存统一资源
}
if(menu_list.size()>0){
psappmenuitemService.saveOrUpdateBatch(menu_list);//批量保存统一资源
}
if(permission_list.size()>0){
permissionService.saveOrUpdateBatch(permission_list);//批量保存权限资源
}
} catch (Exception e) {
return error("资源同步失败,失败原因为:"+e);
}
return success("资源同步成功");
}
/**
* 存储菜单资源
* @param capabilityPermissionObj
* @param systemId
* @param permission_list
* @param menu_list
*/
private void parseAppMenus(JSONObject capabilityPermissionObj, String systemId, List<SYS_PERMISSION> permission_list, List<SYS_PSAPPMENUITEM> menu_list) {
if(capabilityPermissionObj!=null) {
JSONArray appMenuArr = capabilityPermissionObj.getJSONArray("appmenus");
if(appMenuArr.size()>0){
for(int a=0;a<appMenuArr.size();a++){
JSONObject App=appMenuArr.getJSONObject(a);
String appId=App.getString("appid");
String appName=App.getString("appname");
if(App.containsKey("appmenu") && App.getJSONArray("appmenu").size()>0){
JSONArray AppMenuArr=App.getJSONArray("appmenu");
for(int b=0;b<AppMenuArr.size();b++){
JSONObject appMenu=AppMenuArr.getJSONObject(b);
String appMenuId=appMenu.getString("menuid");
String appMenuName=appMenu.getString("menuname");
if(appMenu.containsKey("menuitem")&& appMenu.getJSONArray("menuitem").size()>0){
JSONArray menuItemArr=appMenu.getJSONArray("menuitem");
parseMenuItems( menuItemArr , "", systemId, appId, appName, appMenuId, appMenuName, permission_list, menu_list);
}
}
}
}
}
}
}
/**
* 解析菜单项集合
* @param menuItemArr
* @param systemId
* @param permission_list
* @param menu_list
*/
private void parseMenuItems(JSONArray menuItemArr ,String parentMenuItemId, String systemId, String appId, String appName, String appMenuId,String appMenuName, List<SYS_PERMISSION> permission_list, List<SYS_PSAPPMENUITEM> menu_list){
for(int a=0;a<menuItemArr.size();a++){
JSONObject menuItem=menuItemArr.getJSONObject(a);
String menuItemId=menuItem.getString("id");
String menuItemName=menuItem.getString("name");
if(menuItem.containsKey("items") && menuItem.getJSONArray("items").size()>0){
JSONArray tempMenuItems=menuItem.getJSONArray("items");
parseMenuItems(tempMenuItems,menuItemId,systemId,appId,appName,appMenuId,appMenuName,permission_list,menu_list);
}
saveMenuItem(menuItemId,menuItemName,parentMenuItemId,systemId,appId,appName,appMenuId,appMenuName,permission_list,menu_list);
}
}
/**
* 保存菜单项
* @param menuItemId
* @param menuItemName
* @param parentMenuItemId
* @param systemId
* @param appId
* @param appName
* @param appMenuId
* @param appMenuName
* @param permission_list
* @param menu_list
*/
private void saveMenuItem(String menuItemId,String menuItemName , String parentMenuItemId, String systemId, String appId, String appName, String appMenuId,String appMenuName, List<SYS_PERMISSION> permission_list, List<SYS_PSAPPMENUITEM> menu_list){
String sysPermissionId=String.format("%s-%s-%s-%s",systemId,appId,appMenuId,menuItemId);
SYS_PERMISSION sys_permission =new SYS_PERMISSION();
sys_permission.setPermissionid(sysPermissionId);
sys_permission.setPermissionname(menuItemName);
sys_permission.setPssystemid(systemId);
sys_permission.setPermissiontype(AppMenuTag);
sys_permission.setEnable(1);
sys_permission.setCreatedate(new Timestamp(new Date().getTime()));
sys_permission.setUpdatedate(new Timestamp(new Date().getTime()));
permission_list.add(sys_permission);
//存菜单项表
SYS_PSAPPMENUITEM psAppMenuItem=new SYS_PSAPPMENUITEM();
psAppMenuItem.setAppmenuitemid(sysPermissionId);
psAppMenuItem.setAppmenuitemname(menuItemName);
psAppMenuItem.setPsappid(appId);
psAppMenuItem.setPsappname(appName);
psAppMenuItem.setPsappmenuid(appMenuId);
psAppMenuItem.setPsappmenuname(appMenuName);
psAppMenuItem.setPssystemid(systemId);
psAppMenuItem.setPsappmenuitemid(menuItemId);
psAppMenuItem.setPsapppmenuitemid(parentMenuItemId);
psAppMenuItem.setCreatedate(new Timestamp(new Date().getTime()));
psAppMenuItem.setUpdatedate(new Timestamp(new Date().getTime()));
menu_list.add(psAppMenuItem);
}
/**
* 存储统一资源
* @param capabilityPermissionObj
*/
private void parseUniRes(JSONObject capabilityPermissionObj,String systemId,List<SYS_PERMISSION> permission_list,List<SYS_PSSYSUNIRES> unires_list) {
if(capabilityPermissionObj!=null){
JSONArray uniResArr=capabilityPermissionObj.getJSONArray("unires");
if(uniResArr.size()>0){
for(int a=0;a<uniResArr.size();a++){
JSONObject uniRes=uniResArr.getJSONObject(a);
createUniRes(uniRes,systemId,permission_list,unires_list);
}
}
}
}
/**
* 创建统一资源
* @param uniRes
*/
private void createUniRes(JSONObject uniRes ,String systemId,List<SYS_PERMISSION> permission_list,List<SYS_PSSYSUNIRES> unires_list) {
String uniResCode=uniRes.getString("unirescode");
String uniResName=uniRes.getString("uniresname");
String uniResId= String.format("%s-%s",systemId,uniResCode);
SYS_PERMISSION sys_permission =new SYS_PERMISSION();
sys_permission.setPermissionid(uniResId);
sys_permission.setPermissionname(uniResName);
sys_permission.setPssystemid(systemId);
sys_permission.setPermissiontype(UniResTag);
sys_permission.setEnable(1);
sys_permission.setCreatedate(new Timestamp(new Date().getTime()));
sys_permission.setUpdatedate(new Timestamp(new Date().getTime()));
permission_list.add(sys_permission);
SYS_PSSYSUNIRES sys_pssysunires=new SYS_PSSYSUNIRES();
sys_pssysunires.setUniresid(uniResId);
sys_pssysunires.setUniresname(uniResName);
sys_pssysunires.setUnirescode(uniResCode);
sys_pssysunires.setCreatedate(new Timestamp(new Date().getTime()));
sys_pssysunires.setUpdatedate(new Timestamp(new Date().getTime()));
unires_list.add(sys_pssysunires);
}
/**
* 保存实体数据能力
* @param permission
* @param systemId
* @param sysPermission
* @param opprivPermission
*/
public void parseDataRange(JSONObject permission, String systemId, List<SYS_PERMISSION> sysPermission, List<SYS_PSDEOPPRIV> opprivPermission){
JSONArray entities=permission.getJSONArray("entities");
for(int a=0;a<entities.size();a++){
JSONObject entity=entities.getJSONObject(a);
JSONArray dataSetArray=entity.getJSONArray("dedataset");
JSONArray deActionArray=entity.getJSONArray("deaction");
JSONArray dataScope=entity.getJSONArray("datascope");
createDataScope(dataSetArray,dataScope,entity,DataSetTag,systemId,sysPermission,opprivPermission);//存储数据集
createDataScope(deActionArray,dataScope,entity,DEActionType,systemId,sysPermission,opprivPermission);//存储实体行为
}
}
/**
* 根据实体行为或数据集合结合预定于数据类型生成数据范围
* @param deActionArray
* @param dataScopeArray
* @param entity
* @param permissionType
* @param systemId
* @param ability_list
* @param opprivList
*/
private void createDataScope(JSONArray deActionArray , JSONArray dataScopeArray, JSONObject entity , String permissionType, String systemId , List<SYS_PERMISSION> ability_list, List<SYS_PSDEOPPRIV> opprivList){
for(int b=0;b<deActionArray.size();b++) {
JSONObject deSource = deActionArray.getJSONObject(b);
String deActionId=deSource.getString("id");
String deActionType=deSource.getString("type");
//getDraft、CheckKey行为、自定义行为、数据查询不生成预置范围相关数据
if( (permissionType.equalsIgnoreCase(DEActionType) && deActionId.equalsIgnoreCase("GetDraft")) ||
(permissionType.equalsIgnoreCase(DEActionType) && deActionId.equalsIgnoreCase("CheckKey")) ||
(permissionType.equalsIgnoreCase(DEActionType) && !deActionType.equalsIgnoreCase("BUILTIN")) ||
(permissionType.equalsIgnoreCase(DataSetTag)) ) {
JSONObject dataScope =new JSONObject();
dataScope.put("id","all");
dataScope.put("name","全部数据");
createDataScope(entity,deSource,dataScope,permissionType,systemId,ability_list,opprivList);
}
else{
for(int c=0;c<dataScopeArray.size();c++){
JSONObject dataScope =dataScopeArray.getJSONObject(c);
createDataScope(entity,deSource,dataScope,permissionType,systemId,ability_list,opprivList);//实体预置行为及数据集
}
}
}
}
/**
* 根据实体行为或数据集合结合预定于数据类型生成数据范围
* @param entity
* @param source
* @param dataScope
* @param permissionType
* @param systemId
* @param ability_list
* @param opprivList
*/
private void createDataScope(JSONObject entity, JSONObject source , JSONObject dataScope, String permissionType, String systemId , List<SYS_PERMISSION> ability_list, List<SYS_PSDEOPPRIV> opprivList) {
String deName=entity.getString("dename");
String deLogicName=entity.getString("delogicname");
JSONObject module=entity.getJSONObject("sysmoudle");
String moduleId=module.getString("id");
String moduleName=module.getString("name");
String sourceId=source.getString("id");
String sourceName=source.getString("name");
String dataRangeId=dataScope.getString("id");
String dataRangeName=dataScope.getString("name");
String permissionId=String.format("%s-%s-%s-%s",systemId,deName,sourceId,dataRangeId);
String permissionName;
if(!StringUtils.isEmpty(dataRangeName)){
permissionName=String.format("[%s]%s[%s]",deLogicName,sourceName,dataRangeName);
}
else{
permissionName=String.format("[%s]%s",deLogicName,sourceName);
}
//存资源表
SYS_PERMISSION sys_permission =new SYS_PERMISSION();
sys_permission.setPermissionname(permissionName);
sys_permission.setPssystemid(systemId);
sys_permission.setPermissionid(permissionId);
sys_permission.setPermissiontype(OPPriTag);
sys_permission.setEnable(1);
sys_permission.setUpdatedate(new Timestamp(new Date().getTime()));
sys_permission.setCreatedate(new Timestamp(new Date().getTime()));
ability_list.add(sys_permission);
//存数据操作能力表
SYS_PSDEOPPRIV psDEOppriv=new SYS_PSDEOPPRIV();
psDEOppriv.setPsdeopprivid(permissionId);
psDEOppriv.setPsdeopprivname(permissionName);
psDEOppriv.setPssystemid(systemId);
psDEOppriv.setPssysmoduleid(moduleId);
psDEOppriv.setPssysmodulename(moduleName);
psDEOppriv.setPsdataentityid(deName);
psDEOppriv.setPsdataentityname(deLogicName);
psDEOppriv.setPssourceid(sourceId);
psDEOppriv.setPssourcename(sourceName);
psDEOppriv.setPsdedatarangeid(dataRangeId);
psDEOppriv.setPsdedatarangename(dataRangeName);
psDEOppriv.setPssourcetype(permissionType);
psDEOppriv.setCreatedate(new Timestamp(new Date().getTime()));
psDEOppriv.setUpdatedate(new Timestamp(new Date().getTime()));
opprivList.add(psDEOppriv);
}
private JSONObject success(String msg){
JSONObject obj =new JSONObject();
obj.put("code",1);
obj.put("msg",msg);
return obj;
}
private JSONObject error(String msg){
JSONObject obj =new JSONObject();
obj.put("code",0);
obj.put("msg",msg);
return obj;
}
}
package cn.ibizlab.api.rest.extensions;
import cn.ibizlab.core.extensions.service.UAACoreService;
import cn.ibizlab.util.errors.BadRequestAlertException;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import cn.ibizlab.core.uaa.extensions.domain.PermissionNode;
import cn.ibizlab.core.uaa.extensions.service.UAACoreService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;
@RestController
public class UAACoreResource {
......@@ -24,60 +22,13 @@ public class UAACoreResource {
*
* @return
*/
@GetMapping(value = "/sys_permissions/getallMenuAndPermissionAndUnires")
public ResponseEntity<JSONArray> getallMenuAndPermissionAndUnires(@Validated @NotBlank(message = "roleid不允许为空")@RequestParam("roleid") String roleid) {
JSONArray treeNode = new JSONArray();
// 获取应用菜单
treeNode.add(uaaCoreService.getAppMenu());
// 获取数据能力
treeNode.add(uaaCoreService.getDEOppriv());
// 获取统一资源
treeNode.add(uaaCoreService.getUnires());
// 获取当前角色所有权限
treeNode.add(uaaCoreService.getallPermissionByRoleid(roleid));
return ResponseEntity.ok().body(treeNode);
@GetMapping(value = "/sysroles/{roleid}/sysrolepermissions/tree")
public ResponseEntity<Map<String, List<PermissionNode>>> getTree(@Validated @NotBlank(message = "roleid不允许为空")@PathVariable("roleid") String roleid) {
Map<String,List<PermissionNode>> map = uaaCoreService.getPermissionTree();
map.put("SELECTED",uaaCoreService.getRolePermissionByRoleId(roleid));
return ResponseEntity.ok().body(map);
}
/**
* 删除当前角色的所有角色权限关系
* @param param
* @return
*/
@PostMapping(value = "/sys_permissions/deleteRolePermissionByRoleid")
public ResponseEntity<JSONObject> deleteRolePermissionByRoleid(@RequestBody JSONObject param) {
JSONObject resObj = new JSONObject();
String roleid = param.getString("roleid");
if (StringUtils.isEmpty(roleid))
new BadRequestAlertException("操作失败,未获取到当前角色标识!","","");
uaaCoreService.clearRolePermissionByRoleid(roleid);
return ResponseEntity.ok(resObj);
}
/**
* 保存选中的权限信息
* @param param
* @return
*/
@PostMapping(value = "/sys_permissions/saveRolePermissionByRoleid")
public ResponseEntity<JSONObject> saveRolePermissionByRoleid(@RequestBody JSONObject param) {
JSONObject resObj = new JSONObject();
// 角色id
String roleid = param.getString("roleid");
if (StringUtils.isEmpty(roleid))
new BadRequestAlertException("操作失败,未获取到当前角色标识!","","");
// 选中的权限信息
JSONArray checkedNodes = param.getJSONArray("checkedNodes");
if (checkedNodes.size() > 0) {
// save操作
uaaCoreService.saveRolePermissionByRoleid(roleid, checkedNodes);
} else {
new BadRequestAlertException("操作失败,未获取到选中数据!","","");
}
return ResponseEntity.ok(resObj);
}
}
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册