From 28042855859ab54a6d0785f3b7ea97a60412673f Mon Sep 17 00:00:00 2001 From: yaoq Date: Mon, 8 Aug 2022 16:47:02 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/bpm/web/design/form/ModelForm.java | 14 +- .../system/bpm/web/sys/dev/ComboHandler.java | 13 +- .../user/dataRightGroup/DataRightGroupHandler.java | 39 ++++ .../user/dataRightGroup/DataRightGroupService.java | 12 +- .../smtweb/system/bpm/web/sys/user/menu/Menu.java | 120 +++++++++-- .../system/bpm/web/sys/user/menu/MenuCache.java | 19 +- .../system/bpm/web/sys/user/menu/MenuHandler.java | 6 +- .../bpm/web/sys/user/menuPlan/MenuPlanCache.java | 9 +- .../system/bpm/web/sys/user/role/RoleHandler.java | 237 +++++++++++++++++++++ .../system/bpm/web/sys/user/role/RoleRight.java | 121 +++++++++++ .../bpm/web/sys/user/role/RoleRightContent.java | 83 ++++++++ .../system/bpm/web/sys/user/role/RoleService.java | 16 +- .../event/bpm/sys/user/dataRightGroup/drgList.js | 22 ++ .../static/event/bpm/sys/user/role/roleRight.js | 18 ++ .../cc/smtweb/framework/core/common/SwEnum.java | 30 ++- .../cc/smtweb/framework/core/common/SwMap.java | 11 +- .../cc/smtweb/framework/core/util/MapUtil.java | 2 +- 17 files changed, 706 insertions(+), 66 deletions(-) create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/dataRightGroup/DataRightGroupHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleHandler.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleRight.java create mode 100644 smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleRightContent.java create mode 100644 smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/dataRightGroup/drgList.js create mode 100644 smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/role/roleRight.js diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java index 4daa074..8f060d0 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java @@ -3,8 +3,9 @@ package cc.smtweb.system.bpm.web.design.form; import cc.smtweb.framework.core.annotation.SwTable; import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetField; import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; -import cc.smtweb.system.bpm.web.design.form.define.PageModel; /** * Created by Akmm at 2022/4/15 17:26 @@ -43,6 +44,17 @@ public class ModelForm extends DefaultEntity { this.masterTableId = masterTableId; } + public PageDatasetField getField(String field) { + for (PageDataset ds : getDatasets().list) { + for (PageDatasetField df : ds.fields) { + if (df.name.equals(field)) { + return df; + } + } + } + return null; + } + public PageDatasets getDatasets() { if (datasets == null) { synchronized (ModelForm.class) { diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/dev/ComboHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/dev/ComboHandler.java index f784392..3ac4bab 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/dev/ComboHandler.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/dev/ComboHandler.java @@ -86,7 +86,7 @@ public class ComboHandler { } catch (Exception ue) { return SwListData.create(new ArrayList(), 0); } - return SwListData.create(list, list.size()); + return SwListData.create(list, 0); } @Override @@ -105,20 +105,21 @@ public class ComboHandler { @Override public SwListData buildListData() { - ModelForm mf = ModelFormCache.getInstance().get(params.readMap("filter").readLong("f_page")); + ModelForm mf = ModelFormCache.getInstance().get(filter.readLong("f_page")); if (mf == null) return SwListData.create(new ArrayList(), 0); PageDatasets pageDatasets = mf.getDatasets(); + if (pageDatasets == null) return SwListData.create(new ArrayList(), 0); Map map = new HashMap<>(); pageDatasets.list.forEach(data -> { data.fields.forEach(field -> { - if (map.containsKey(field.name)) return; + if (map.containsKey(field.field)) return; SwMap swMap = new SwMap(); - swMap.put("f_id", field.name); + swMap.put("f_id", field.field); swMap.put("f_name", field.label); - map.put(field.name, swMap); + map.put(field.field, swMap); }); }); - return SwListData.create(new ArrayList(map.values()), map.size()); + return SwListData.create(new ArrayList(map.values()), 0); } @Override diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/dataRightGroup/DataRightGroupHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/dataRightGroup/DataRightGroupHandler.java new file mode 100644 index 0000000..f5180b6 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/dataRightGroup/DataRightGroupHandler.java @@ -0,0 +1,39 @@ +package cc.smtweb.system.bpm.web.sys.user.dataRightGroup; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.util.JsonUtil; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageLoadHandler; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageSaveHandler; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Author: tanghp + * @Date: 2022-08-01 17:47 + * @Desc: + */ +public class DataRightGroupHandler { + + static class DrgSaveHandler extends DynPageSaveHandler { + + @Override + protected DefaultEntity readBeanFromPage(PageDataset pageDataSet, SwMap data) { + DataRightGroup bean = (DataRightGroup) super.readBeanFromPage(pageDataSet, data); + bean.setContent(JsonUtil.encodeString(data.readListMap("sdrg_content"))); + return bean; + } + } + + static class DrgLoadHandle extends DynPageLoadHandler { + + @Override + protected void afterLoadBean(PageDataset dataset, SwMap bean) { + super.afterLoadBean(dataset, bean); + bean.put("sdrg_content", JsonUtil.parseList(bean.readString("sdrg_content"), Map.class)); + } + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/dataRightGroup/DataRightGroupService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/dataRightGroup/DataRightGroupService.java index 36d8b92..095f4e4 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/dataRightGroup/DataRightGroupService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/dataRightGroup/DataRightGroupService.java @@ -1,12 +1,8 @@ package cc.smtweb.system.bpm.web.sys.user.dataRightGroup; -import cc.smtweb.framework.core.annotation.SwBody; import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; /** * Created by 1 at 2022-08-04 17:45:35 @@ -17,6 +13,12 @@ public class DataRightGroupService extends DynPageService { //public final static String TYPE_DEMO = "demo"; @Override protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_LOAD: + return new DataRightGroupHandler.DrgLoadHandle(); + case TYPE_SAVE: + return new DataRightGroupHandler.DrgSaveHandler(); + } return super.createHandler(type); } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/Menu.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/Menu.java index 60b19f3..ba2dd4f 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/Menu.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/Menu.java @@ -1,8 +1,14 @@ package cc.smtweb.system.bpm.web.sys.user.menu; import cc.smtweb.framework.core.annotation.SwTable; -import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.db.impl.DefaultEntity; +import cc.smtweb.framework.core.util.JsonUtil; +import cc.smtweb.framework.core.util.PubUtil; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * Created by 1 at 2022-08-03 08:53:34 @@ -16,94 +22,166 @@ public class Menu extends DefaultEntity { super(ENTITY_NAME); } - /** 主键 */ + /** + * 主键 + */ public long getId() { return getLong("sm_id"); } - /** 主键 */ + /** + * 主键 + */ public void setId(long sm_id) { put("sm_id", sm_id); } - /** 排序 */ + + /** + * 排序 + */ public int getSeq() { return getInt("sm_seq"); } - /** 排序 */ + /** + * 排序 + */ public void setSeq(int sm_seq) { put("sm_seq", sm_seq); } - /** 名称 */ + + /** + * 名称 + */ public String getName() { return getStr("sm_name"); } - /** 名称 */ + /** + * 名称 + */ public void setName(String sm_name) { put("sm_name", sm_name); } - /** 图标 */ + + /** + * 图标 + */ public String getIcon() { return getStr("sm_icon"); } - /** 图标 */ + /** + * 图标 + */ public void setIcon(String sm_icon) { put("sm_icon", sm_icon); } - /** 权限点 */ + + /** + * 权限点 + */ public String getRight() { return getStr("sm_right"); } - /** 权限点 */ + /** + * 权限点 + */ public void setRight(String sm_right) { put("sm_right", sm_right); } - /** 类型 */ + + /** + * 类型 + */ public boolean isType() { return getBool("sm_type"); } - /** 类型 */ + /** + * 类型 + */ public void set(boolean sm_type) { setBool("sm_type", sm_type); } - /** 请求内容 */ + + /** + * 请求内容 + */ public String getContent() { return getStr("sm_content"); } - /** 请求内容 */ + /** + * 请求内容 + */ public void setContent(String sm_content) { put("sm_content", sm_content); } - /** 所属项目 */ + + /** + * 所属项目 + */ public long getPrjId() { return getLong("sm_prj_id"); } - /** 所属项目 */ + /** + * 所属项目 + */ public void setPrjId(long sm_prj_id) { put("sm_prj_id", sm_prj_id); } - /** 所属目录 */ + + /** + * 所属目录 + */ public long getMcId() { return getLong("sm_mc_id"); } - /** 所属目录 */ + /** + * 所属目录 + */ public void setMcId(long sm_mc_id) { put("sm_mc_id", sm_mc_id); } - /** 备注 */ + + /** + * 备注 + */ public String getRemark() { return getStr("sm_remark"); } - /** 备注 */ + /** + * 备注 + */ public void setRemark(String sm_remark) { put("sm_remark", sm_remark); } + + + public final String getPath() { + if (PubUtil.isEmpty(getContent())) return ""; + return JsonUtil.parseMap(getContent()).get("path").toString(); + } + + public final String getPageId() { + if (PubUtil.isEmpty(getContent())) return ""; + return JsonUtil.parseMap(getContent()).get("pageId").toString(); + } + + public final List getRightList(String type) { + List set = new ArrayList<>(); + if (PubUtil.isEmpty(getRight())) return set; + return (List) JsonUtil.parseMap(getRight()).get(type); + } + + public final Set getRightSet(String type) { + List list = getRightList(type); + if (list == null) return new HashSet<>(); + return new HashSet(list); + } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/MenuCache.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/MenuCache.java index 539c644..2f7f61d 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/MenuCache.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/MenuCache.java @@ -3,9 +3,8 @@ package cc.smtweb.system.bpm.web.sys.user.menu; import cc.smtweb.framework.core.annotation.SwCache; import cc.smtweb.framework.core.cache.AbstractEntityCache; import cc.smtweb.framework.core.cache.CacheManager; -import cc.smtweb.framework.core.util.JsonUtil; -import cc.smtweb.framework.core.util.PubUtil; +import java.util.HashSet; import java.util.Set; /** @@ -35,8 +34,18 @@ public class MenuCache extends AbstractEntityCache { public final String getPath(long menu_id) { Menu menu = get(menu_id); if (menu == null) return ""; - String content = menu.getContent(); - if (PubUtil.isEmpty(content)) return ""; - return JsonUtil.parseMap(menu.getContent()).get("path").toString(); + return menu.getPath(); + } + + public final String getPageId(long menu_id) { + Menu menu = get(menu_id); + if (menu == null) return ""; + return menu.getPageId(); + } + + public final Set getRight(long menu_id, String type) { + Menu menu = get(menu_id); + if (menu == null) return new HashSet<>(); + return menu.getRightSet(type); } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/MenuHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/MenuHandler.java index cedc1fb..dcf4ba3 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/MenuHandler.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menu/MenuHandler.java @@ -73,9 +73,9 @@ public class MenuHandler { data.put("sm_content", JsonUtil.encodeString(sm_content)); //处理权限点 SwMap sm_right = new SwMap(); - sm_right.put("data", data.readStringList("sm_right_data")); - sm_right.put("func", data.readStringList("sm_right_func")); - sm_right.put("field", data.readStringList("sm_right_field")); + sm_right.put("data", data.readStringSet("sm_right_data")); + sm_right.put("func", data.readStringSet("sm_right_func")); + sm_right.put("field", data.readStringSet("sm_right_field")); data.put("sm_right", JsonUtil.encodeString(sm_right)); return super.readBeanFromPage(pageDataSet, data); } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menuPlan/MenuPlanCache.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menuPlan/MenuPlanCache.java index 4dc294f..7677d93 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menuPlan/MenuPlanCache.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/menuPlan/MenuPlanCache.java @@ -4,9 +4,6 @@ import cc.smtweb.framework.core.annotation.SwCache; import cc.smtweb.framework.core.cache.AbstractEntityCache; import cc.smtweb.framework.core.cache.CacheManager; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; import java.util.Set; /** @@ -31,4 +28,10 @@ public class MenuPlanCache extends AbstractEntityCache { public final Set getByP(String key) { return getListByKey(mk_p, key); } + + public final MenuPlanItem getById(long mp_id, long key) { + MenuPlan menuPlan = get(mp_id); + if (menuPlan == null) return null; + return new MenuPlanContent(menuPlan.getContent()).findById(key); + } } diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleHandler.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleHandler.java new file mode 100644 index 0000000..361edac --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleHandler.java @@ -0,0 +1,237 @@ +package cc.smtweb.system.bpm.web.sys.user.role; + +import cc.smtweb.framework.core.common.R; +import cc.smtweb.framework.core.common.SwEnum; +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.db.DbEngine; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.mvc.service.SwListData; +import cc.smtweb.framework.core.util.PubUtil; +import cc.smtweb.system.bpm.web.design.form.ModelForm; +import cc.smtweb.system.bpm.web.design.form.ModelFormCache; +import cc.smtweb.system.bpm.web.design.form.define.PageDataset; +import cc.smtweb.system.bpm.web.design.form.define.PageDatasetField; +import cc.smtweb.system.bpm.web.engine.dynPage.*; +import cc.smtweb.system.bpm.web.sys.user.dataRight.DataRightDefineCache; +import cc.smtweb.system.bpm.web.sys.user.dataRightGroup.DataRightGroupCache; +import cc.smtweb.system.bpm.web.sys.user.menu.Menu; +import cc.smtweb.system.bpm.web.sys.user.menu.MenuCache; +import cc.smtweb.system.bpm.web.sys.user.menuPlan.MenuPlanCache; +import cc.smtweb.system.bpm.web.sys.user.menuPlan.MenuPlanItem; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +/** + * @Author: tanghp + * @Date: 2022-08-01 17:47 + * @Desc: + */ +public class RoleHandler { + private final static String ROLE_FUNC = "roleFuncCombo"; + private final static String ROLE_Field = "roleFieldCombo"; + private final static String ROLE_DATA = "roleDataList"; + private final static String RIGHT_DATA = "rightData"; + + static class RoleSaveHandler extends DynPageSaveHandler { + + /** + * 保存指定数据集操作,入参:{pageId,dataset:"", data:{form:{},list: {total:0,rows:[]}}, filter:{}} + */ + public R saveOne() { + //数据集 + String dbName = params.readString("dataset"); + SwMap filter = params.readMap("filter"); + //待保存数据 + SwMap data = params.readMap("data"); + if (data == null) throw new BizException("没有收到待保存的的数据:" + dbName + "!"); + //对应的数据集定义 + PageDataset pageDataSet = findDataset(dbName); + if (pageDataSet == null) throw new BizException("没有找到指定的的数据集定义:" + dbName + "!"); + if (pageDataSet.name.equals(RIGHT_DATA)) { + long role_id = filter.readLong("role_id"); + long mp_id = filter.readLong("mp_id"); + if (role_id <= 0 || mp_id <= 0) return R.error("未指定角色或菜单!"); + SwMap formData = data.readMap("form"); + + Role role = RoleCache.getInstance().get(role_id); + MenuPlanItem item = MenuPlanCache.getInstance().getById(role.getSmpId(), mp_id); + RoleRightContent rc = new RoleRightContent(role.getPrivilege()); + RoleRight right = rc.getRoleRight(item.getId()); + if (right == null) { + right = new RoleRight(); + right.setId(item.getId()); + right.setMenuId(item.getMenu()); + right.setMenu(1); + } + right.setFunc(formData.readStringSet("func")); + right.setData(formData.readListMap("data")); + right.setField(MenuCache.getInstance().get(item.getMenu()).getRightSet(SwEnum.MenuRightType.FIELD.value), formData.readStringSet("write"), formData.readStringSet("read")); + + rc.saveItem(right); + role.setPrivilege(rc.toContentStr()); + + DbEngine.getInstance().findDao(Role.ENTITY_NAME).updateEntity(role); + RoleCache.getInstance().put(role); + return R.success(DynRetBean.createBean(formData)); + } + return super.saveOne(); + } + } + + static class RoleLoadHandle extends DynPageLoadHandler { + + @Override + public DynPageProvider getProvider() { + return new RightDataProvider(); + } + + @Override + public DynPageListHandler getListWorker(SwMap filter, PageDataset pageDataSet) { + switch (pageDataSet.name) { + case ROLE_FUNC: + return new RoleFuncListHandle(pageId, filter, pageDataSet); + case ROLE_Field: + return new RoleFieldListHandle(pageId, filter, pageDataSet); + case ROLE_DATA: + return new RoleDataListHandle(pageId, filter, pageDataSet); + } + return super.getListWorker(filter, pageDataSet); + } + + + } + + static class RightDataProvider extends DynPageProvider { + @Override + public SwMap loadData(SwMap filter, PageDataset pageDataSet) { + if (pageDataSet.name.equals(RIGHT_DATA)) { + long role_id = filter.readLong("role_id"); + long mp_id = filter.readLong("mp_id"); + if (role_id <= 0 || mp_id <= 0) return new SwMap(); + Role role = RoleCache.getInstance().get(role_id); + MenuPlanItem item = MenuPlanCache.getInstance().getById(role.getSmpId(), mp_id); + if (item == null) return new SwMap(); + RoleRightContent rc = new RoleRightContent(role.getPrivilege()); + SwMap bean = new SwMap(); + bean.put("func", rc.getFuncRight(item.getId())); + bean.put("read", rc.getFieldRight(item.getId(), 1)); + bean.put("write", rc.getFieldRight(item.getId(), 2)); + return bean; + } + return super.loadData(filter, pageDataSet); + } + } + + static class RoleFieldListHandle extends DynPageListHandler { + + public RoleFieldListHandle(long pageId, SwMap filter, PageDataset pageDataSet) { + super(pageId, filter, pageDataSet); + } + + private String getFieldName(ModelForm mf, String field) { + PageDatasetField df = mf.getField(field); + if (df == null) return null; + return df.label; + } + + @Override + public SwListData buildListData() { + List list = new ArrayList<>(); + long role_id = filter.readLong("role_id"); + long mp_id = filter.readLong("mp_id"); + if (role_id <= 0 || mp_id <= 0) return SwListData.create(list, 0); + Role role = RoleCache.getInstance().get(role_id); + MenuPlanItem item = MenuPlanCache.getInstance().getById(role.getSmpId(), mp_id); + if (item == null) return SwListData.create(list, 0); + Menu menu = MenuCache.getInstance().get(item.getMenu()); + ModelForm mf = ModelFormCache.getInstance().get(menu.getPageId()); + for (String f : menu.getRightSet(SwEnum.MenuRightType.FIELD.value)) { + String name = getFieldName(mf, f); + if (name == null) continue; + SwMap row = new SwMap(); + row.put("f_id", f); + row.put("f_name", name); + list.add(row); + } + return SwListData.create(list, 0); + } + + @Override + public R getTotal() { + return R.success(buildListData().getTotal()); + } + } + + static class RoleFuncListHandle extends DynPageListHandler { + + public RoleFuncListHandle(long pageId, SwMap filter, PageDataset pageDataSet) { + super(pageId, filter, pageDataSet); + } + + @Override + public SwListData buildListData() { + List list = new ArrayList<>(); + long role_id = filter.readLong("role_id"); + long mp_id = filter.readLong("mp_id"); + if (role_id <= 0 || mp_id <= 0) return SwListData.create(list, 0); + Role role = RoleCache.getInstance().get(role_id); + MenuPlanItem item = MenuPlanCache.getInstance().getById(role.getSmpId(), mp_id); + if (item == null) return SwListData.create(list, 0); + Menu menu = MenuCache.getInstance().get(item.getMenu()); + for (String f : menu.getRightSet(SwEnum.MenuRightType.FUNC.value)) { + if (PubUtil.isEmpty(f)) continue; + SwMap row = new SwMap(); + row.put("f_id", f); + row.put("f_name", SwEnum.MenuFuncRight.instance.getName(f)); + list.add(row); + } + return SwListData.create(list, 0); + } + + @Override + public R getTotal() { + return R.success(buildListData().getTotal()); + } + } + + static class RoleDataListHandle extends DynPageListHandler { + + public RoleDataListHandle(long pageId, SwMap filter, PageDataset pageDataSet) { + super(pageId, filter, pageDataSet); + } + + @Override + public SwListData buildListData() { + List list = new ArrayList<>(); + long role_id = filter.readLong("role_id"); + long mp_id = filter.readLong("mp_id"); + if (role_id <= 0 || mp_id <= 0) return SwListData.create(list, 0); + Role role = RoleCache.getInstance().get(role_id); + MenuPlanItem item = MenuPlanCache.getInstance().getById(role.getSmpId(), mp_id); + if (item == null) return SwListData.create(list, 0); + Menu menu = MenuCache.getInstance().get(item.getMenu()); + RoleRightContent rc = new RoleRightContent(role.getPrivilege()); + Map data = rc.getDataRight(item.getId()); + + for (String f : menu.getRightSet(SwEnum.MenuRightType.DATA.value)) { + if (PubUtil.isEmpty(f)) continue; + SwMap row = new SwMap(); + row.put("key", f); + row.put("key_text", DataRightDefineCache.getInstance().get(f).getName()); + if (data.get(f) != null && PubUtil.isNotEmpty(data.get(f).toString())) { + row.put("value", data.get(f)); + row.put("value_text", DataRightGroupCache.getInstance().get(data.get(f).toString()).getName()); + } + list.add(row); + } + return SwListData.create(list, 0); + } + + @Override + public R getTotal() { + return R.success(buildListData().getTotal()); + } + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleRight.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleRight.java new file mode 100644 index 0000000..96f3e3e --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleRight.java @@ -0,0 +1,121 @@ +package cc.smtweb.system.bpm.web.sys.user.role; + +import cc.smtweb.framework.core.db.impl.BaseBean; + +import java.util.*; + +/** + * @Author: tanghp + * @Date: 2022-08-02 12:52 + * @Desc: + */ +public class RoleRight extends BaseBean { + /** + * 主键 + */ + public long getId() { + return getLong("id"); + } + + /** + * 主键 + */ + public void setId(long id) { + put("id", id); + } + + + /** + * 菜单ID + */ + public long getMenuId() { + return getLong("menuId"); + } + + /** + * 菜单ID + */ + public void setMenuId(long menuId) { + put("menuId", menuId); + } + + /** + * 菜单权限 + */ + public int getMenu() { + return getInt("menu"); + } + + /** + * 菜单权限 + */ + public void setMenu(int menu) { + put("menu", menu); + } + + /** + * 功能权限 + */ + public Set getRightFunc() { + return (Set) get("func"); + } + + /** + * 功能权限 + */ + public void setFunc(Set func) { + put("func", func); + } + + /** + * [{"key": "权限定义id","value": "权限组id"}] + * 数据权限 + */ + public List> getRightData() { + return (List>) get("data"); + } + + /** + * [{"key": "权限定义id","value": "权限组id"}] + * 数据权限 + */ + public void setData(List> data) { + put("data", data); + } + + /** + * "0-无/1-读/2-写" + * 字段权限 {field1:0,field2:2} + */ + public Map getRightField() { + return (Map) get("field"); + } + + /** + * "0-无/1-读/2-写" + * 字段权限 {field1:0,field2:2} + */ + public void setField(Map field) { + put("field", field); + } + + + public void setField(Set as, Set ws, Set rs) { + Map field = new HashMap<>(); + if (ws == null) ws = new HashSet<>(); + if (rs == null) rs = new HashSet<>(); + as.removeAll(ws); + as.removeAll(rs); + rs.removeAll(ws); + ws.forEach(k -> { + field.put(k, 2); + }); + rs.forEach(k -> { + field.put(k, 1); + }); + as.forEach(k -> { + field.put(k, 0); + }); + setField(field); + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleRightContent.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleRightContent.java new file mode 100644 index 0000000..17233c4 --- /dev/null +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleRightContent.java @@ -0,0 +1,83 @@ +package cc.smtweb.system.bpm.web.sys.user.role; + +import cc.smtweb.framework.core.common.SwMap; +import cc.smtweb.framework.core.exception.BizException; +import cc.smtweb.framework.core.util.JsonUtil; +import cc.smtweb.framework.core.util.PubUtil; + +import java.util.*; + +/** + * @Author: tanghp + * @Date: 2022-08-02 13:16 + * @Desc: 菜单方案content字段处理类 + */ +public class RoleRightContent { + + private Map map = new HashMap<>(); + + public RoleRightContent(String content) { + List tempList = JsonUtil.parseList(content, RoleRight.class); + if (PubUtil.isNotEmpty(content) && tempList == null) { + throw new BizException("角色权限转换失败!"); + } + if (PubUtil.isEmpty(tempList)) return; + tempList.forEach(bean -> { + map.put(bean.getId(), bean); + }); + } + + public void saveItem(SwMap map) { + RoleRight right = new RoleRight(); + } + + // 保存节点 + public void saveItem(RoleRight item) { + map.put(item.getId(), item); + } + + // 删除节点 + public void delItem(long id) { + map.remove(id); + } + + // 转换成字符串 + public String toContentStr() { + return JsonUtil.encodeString(new ArrayList<>(map.values())); + } + + + public RoleRight getRoleRight(Long key) { + return map.get(key); + } + + public String getFuncRight(long key) { + RoleRight right = getRoleRight(key); + if (right == null) return ""; + return PubUtil.getSqlInIds(right.getRightFunc()); + } + + public String getFieldRight(long key, int type) { + RoleRight right = getRoleRight(key); + if (right == null) return ""; + Map cache = right.getRightField(); + if (cache == null || cache.size() == 0) return ""; + Set fields = new HashSet<>(); + cache.forEach((k, v) -> { + if (v == type) fields.add(k); + }); + return PubUtil.getSqlInIds(fields); + } + + public Map getDataRight(long key) { + RoleRight right = getRoleRight(key); + if (right == null) return new HashMap<>(); + List> list = right.getRightData(); + if (list == null || list.size() == 0) return new HashMap<>(); + Map cache = new HashMap<>(); + list.forEach(k -> { + cache.putAll(k); + }); + return cache; + } +} diff --git a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleService.java b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleService.java index 785ec16..574c77b 100644 --- a/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleService.java +++ b/smtweb-framework/bpm/src/main/java/cc/smtweb/system/bpm/web/sys/user/role/RoleService.java @@ -1,22 +1,24 @@ package cc.smtweb.system.bpm.web.sys.user.role; -import cc.smtweb.framework.core.annotation.SwBody; import cc.smtweb.framework.core.annotation.SwService; -import cc.smtweb.framework.core.common.R; -import cc.smtweb.framework.core.common.SwMap; -import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; import cc.smtweb.framework.core.mvc.service.AbstractHandler; -import cc.smtweb.framework.core.session.UserSession; +import cc.smtweb.system.bpm.web.engine.dynPage.DynPageService; /** - * Created by 1 at 2022-07-28 19:15:18 - * 页面【[角色列表]的服务类 + * Created by 1 at 2022-08-08 10:11:53 + * 页面【[角色]的服务类 */ @SwService public class RoleService extends DynPageService { //public final static String TYPE_DEMO = "demo"; @Override protected AbstractHandler createHandler(String type) { + switch (type) { + case TYPE_SAVE: + return new RoleHandler.RoleSaveHandler(); + case TYPE_LOAD: + return new RoleHandler.RoleLoadHandle(); + } return super.createHandler(type); } diff --git a/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/dataRightGroup/drgList.js b/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/dataRightGroup/drgList.js new file mode 100644 index 0000000..7cd7ff0 --- /dev/null +++ b/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/dataRightGroup/drgList.js @@ -0,0 +1,22 @@ +/** + * Created by 1 at 2022-08-08 16:28:04 + * 注册事件类【数据权限组】,参看event.defaultEvent.js + */ +window.$swEvent.setup("bpm.sys.user.dataRightGroup.drgList", { + setup(page) { + const {$params, $refs, $widgets, $model, $utils, $tabRouter, $api} = page || {}; + const {$$message, $$http} = $utils || {}; + + const onEditItem = () => { + $model.drgItemList.data.list.rows = $model.drgCard.getFormVal("sdrg_content"); + } + // 示例 + const onBeforeSave = () => { + $model.drgCard.setFormVal("sdrg_content", $model.drgItemList.data.list.rows); + }; + return { + onEditItem, + onBeforeSave, + } + } +}); diff --git a/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/role/roleRight.js b/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/role/roleRight.js new file mode 100644 index 0000000..772292d --- /dev/null +++ b/smtweb-framework/bpm/src/main/resources/static/event/bpm/sys/user/role/roleRight.js @@ -0,0 +1,18 @@ +/** + * Created by 1 at 2022-08-08 16:06:22 + * 注册事件类【角色权限】,参看event.defaultEvent.js + */ +window.$swEvent.setup("bpm.sys.user.role.roleRight", { + setup(page) { + const {$params, $refs, $widgets, $model, $utils, $tabRouter, $api} = page || {}; + const {$$message, $$http} = $utils || {}; + + // 示例 + const onBeforeSave = () => { + $model.rightData.setFormVal("data", $model.roleDataList.data.list.rows); + }; + return { + onBeforeSave, + } + } +}); diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java index 433eaa8..c7c83c2 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwEnum.java @@ -24,6 +24,7 @@ public interface SwEnum { this.dataType = dataType; this.notNull = 0; } + public FieldTypeBean(Integer value, String name, String dataType, int notNull) { super(value, name); this.dataType = dataType; @@ -34,13 +35,13 @@ public interface SwEnum { class FieldType extends AbstractEnum { public static FieldType instance = new FieldType(); - public static FieldTypeBean ID = instance.addEnum(1, "主键", DataType.ID.value,1); - public static FieldTypeBean CODE = instance.addEnum(2, "编码字段", DataType.CODE.value,1); - public static FieldTypeBean NAME = instance.addEnum(3, "名称字段", DataType.NAME.value,1); + public static FieldTypeBean ID = instance.addEnum(1, "主键", DataType.ID.value, 1); + public static FieldTypeBean CODE = instance.addEnum(2, "编码字段", DataType.CODE.value, 1); + public static FieldTypeBean NAME = instance.addEnum(3, "名称字段", DataType.NAME.value, 1); public static FieldTypeBean PARENT_ID = instance.addEnum(4, "父ID", DataType.ID.value); public static FieldTypeBean LEVEL_CODE = instance.addEnum(5, "级次码", DataType.CODE.value); public static FieldTypeBean LEVEL = instance.addEnum(6, "级次", DataType.SHORT.value); -// public static FieldTypeBean ORDER = instance.addEnum(6, "排序字段", ""); + // public static FieldTypeBean ORDER = instance.addEnum(6, "排序字段", ""); public static FieldTypeBean CREATE_USER = instance.addEnum(7, "创建人", DataType.ID.value); public static FieldTypeBean CREATE_TIME = instance.addEnum(8, "创建时间", DataType.DATETIME.value); public static FieldTypeBean UPDATE_USER = instance.addEnum(9, "更新人", DataType.ID.value); @@ -56,8 +57,9 @@ public interface SwEnum { mapAll.put(value, bean); return bean; } + public FieldTypeBean addEnum(Integer value, String name, String dataType, int notNull) { - final FieldTypeBean bean = new FieldTypeBean(value, name, dataType,notNull); + final FieldTypeBean bean = new FieldTypeBean(value, name, dataType, notNull); mapAll.put(value, bean); return bean; } @@ -129,11 +131,11 @@ public interface SwEnum { public static DataTypeBean INT = instance.addEnum("int", "整型", "int", 0, "int", "Int", Types.INTEGER, "0", EditorType.NUMBER.value); public static DataTypeBean SHORT = instance.addEnum("short", "短整型", "smallint", 0, "int", "Int", Types.SMALLINT, "0", EditorType.NUMBER.value); public static DataTypeBean BOOL = instance.addEnum("bool", "布尔型", "tinyint", 0, "boolean", "Bool", Types.TINYINT, "0", EditorType.SWITCH.value); - public static DataTypeBean CURRENCY = instance.addEnum("currency", "金额型", "bigint", 0, "long", "Long", Types.BIGINT, "0", EditorType.NUMBER.value); - public static DataTypeBean DATE = instance.addEnum("date", "日期型", "bigint", 0, "long","Long", Types.BIGINT, "0", EditorType.DATE.value); + public static DataTypeBean CURRENCY = instance.addEnum("currency", "金额型", "bigint", 0, "long", "Long", Types.BIGINT, "0", EditorType.NUMBER.value); + public static DataTypeBean DATE = instance.addEnum("date", "日期型", "bigint", 0, "long", "Long", Types.BIGINT, "0", EditorType.DATE.value); public static DataTypeBean TIME = instance.addEnum("time", "时间型", "bigint", 0, "long", "Long", Types.BIGINT, "0", EditorType.TIME.value); - public static DataTypeBean DATETIME = instance.addEnum("datetime", "日期时间型", "bigint", 0, "long", "Long", Types.BIGINT, "0", EditorType.DATETIME.value); - public static DataTypeBean POS = instance.addEnum("pos", "经纬度", "bigint", 0, "long", "Long", Types.BIGINT, "0", EditorType.NUMBER.value); + public static DataTypeBean DATETIME = instance.addEnum("datetime", "日期时间型", "bigint", 0, "long", "Long", Types.BIGINT, "0", EditorType.DATETIME.value); + public static DataTypeBean POS = instance.addEnum("pos", "经纬度", "bigint", 0, "long", "Long", Types.BIGINT, "0", EditorType.NUMBER.value); @Override protected DataTypeBean buildBean(String value, String name) { @@ -154,7 +156,7 @@ public interface SwEnum { //根据数据库查询的metadata适配类型 public static DataTypeBean getBySqlType(int sqlType, int precision, int scale) { - for (DataTypeBean bean: instance.mapAll.values()) { + for (DataTypeBean bean : instance.mapAll.values()) { if (bean.type != sqlType) continue; if (bean.dataLength == 0 || bean.dataLength == precision) return bean; } @@ -304,6 +306,14 @@ public interface SwEnum { } } + // 权限类型 + class MenuRightType extends StrEnum { + public static MenuFuncRight instance = new MenuFuncRight(); + public static StrEnumBean DATA = instance.addEnum("data", "数据权限"); + public static StrEnumBean FUNC = instance.addEnum("func", "功能权限"); + public static StrEnumBean FIELD = instance.addEnum("field", "字段权限"); + } + class MenuType extends IntEnum { public static MenuType instance = new MenuType(); public static IntEnumBean DESIGN = instance.addEnum(0, "设计器页面"); diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwMap.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwMap.java index 93a6900..f1cb902 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwMap.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/common/SwMap.java @@ -3,10 +3,7 @@ package cc.smtweb.framework.core.common; import cc.smtweb.framework.core.exception.SwException; import cc.smtweb.framework.core.util.MapUtil; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * 通用map对象,用于无具体类型的传值 @@ -75,6 +72,12 @@ public class SwMap extends HashMap { return MapUtil.readStringList(this, name); } + public Set readStringSet(String name) { + List list = readStringList(name); + if (list == null) return null; + return new HashSet(list); + } + public int readInt(String name) { return MapUtil.readInt(this, name); } diff --git a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/util/MapUtil.java b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/util/MapUtil.java index f57694b..f519fdc 100644 --- a/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/util/MapUtil.java +++ b/smtweb-framework/core/src/main/java/cc/smtweb/framework/core/util/MapUtil.java @@ -216,7 +216,7 @@ public class MapUtil { public static List readStringList(SwMap swMap, String name) { Object value = swMap.get(name); - if (value != null) { + if (value != null && PubUtil.isNotEmpty(value.toString())) { return Arrays.asList(value.toString().split(",")); } return null;