赞
踩
在传统的企业应用架构设计中,不可避免需要涉及用户角色权限的设计,其中最为通用的模型是RBAC模型。RBAC(基于角色的访问控制)是指用户通过角色与权限进行关联。即一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户—角色—权限”的授权模型。在这种模型中,用户与角色之间、角色与权限之间,一般者是多对多的关系。很多架构师和开发者在使用Mendix的时候可能会有相同的疑虑,如何在Mendix上实现原有的企业用户角色权限模型?本案例的设计来源于润建股份有限公司数字平台研发院。数字平台研发院自2019年开始采用Mendix低代码平台进行企业信息系统开发和数字化建设,配备有40余人的研发团队;并在服务商的参与下,设计开发适用于企业客户的用户角色权限系统。
Mendix作为企业级的低代码平台,可以为客户带来符合企业预期的组织架构和用户角色权限管理功能。设计一套灵活的用户中心,实现用户角色权限的模块,简称UPMS(User Permission Management System)。主要实现三个需求点:
User实体是用户模型的核心实体,串联着组织-角色和菜单的关系,关键实体关联关系:
各个关键实体都配置一个临时Helper实体,用于在Table的操作中,辅助主实体做数据查询和操作,如选中某行数据记录,或选中树节点时通过传递AutoID,设置为Helper中的SelectedId字段,关联到对应的实体数据。
根据数据模型,设计组织架构、用户中心、用户角色管理、菜单管理4个主要模块,一键生成相应的实体CURD页面。并根据需求,调整页面的字段属性,根据客户需要,调整布局,形成最终交付的页面。
组织和人员管理页面主要采用自定义树形tree view widget和table进行设计。tree view通过微流递归获取组织数据,形成树形结构。
为了实现点击树节点刷新数据的效果(类似Data View中listen to widge的功能),点击树形数据某个节点时,加载对应节点的数据,需要在tree view中预留回调微流的入口。点击节点时,捕获点击对象并传递ID,触发回调微流,刷新组织管理员table和员工table。
对用户数据进行新增和编辑比较简单,对User实体进行管理。其中Antd select组件支持多选,选定一个或多个角色后,保存用户角色数据(类似Input reference set selector)。
菜单实体具有父级id信息,采用层级展示,使用自定义Tree Table widget进行设计。Tree Table基于Ant Design的Tree Table基础交互,完成对数据的加载和操作。配置项包括基础数据源和字段设置、表头按钮交互设置(顶部按钮)、行内交互操作设置(表格栏目配置)。
新建菜单采用Popup page的方式,根据Menu Helper类获取关联的Menu实体,传递到Menu_NewEdit页面进行数据操作。
角色管理比较简单,直接使用Antd Table对Role实体进行管理。
Table widget的设置,包括数据源、按钮配置等。在数据源设置中使用微流Get_Role获取数据,同时进行字段配置,用于在Table widget点击选中行时,通过传递数据记录的AutoID设置SelectedId字段。在后续微流中可通过SelectedId进行实体的查找和操作。
Antd Table支持用户对行内操作按钮进行配置,在Table中,设置“编辑”、“删除”和“设置权限”三个按钮,每个按钮的‘Action’对应到各自的业务微流中。
通过Helper实体,获取对应的Role实体,并调用微流ACT_OpenAddMenuPage打开当前选定角色对应的权限设置页面。
RoleAddMenu采用Popup page layout,使用自定义的tree view select组件展示和操作。tree view select基于Ant Design的tree view select实现,通过Role Helper类,关联查询对应的Role实体,并根据Role – Menu的关联关系,获取菜单列表,并根据用户角色对菜单项进行配置。
Widget前端的交互操作,主要实现勾选和取消菜单后,对数据关联关系进行set和unset的操作,点击保存后对实体的修改进行提交。
对于权限模块的安全模型,可以设置两个基础角色,admin角色和user角色(按需设计),admin和user角色对page、nanoflow、microflow、Entity采用full read/write权限。
项目安全模型中,administrator角色应包含权限较高的upms.administrator角色;User应该包含权限较低的upms.user角色。
本文粗略从技术上讲解了实现企业组织架构,用户角色权限管理的功能模块UPMS。通过此模块,客户可以在运行时实现菜单列表的管理,角色的配置,以及细颗粒度的CURD操作权限配置,对于有类似需求的客户来说是一个很好的补充。本项目采用了Ant Design的React组件,进行了大量的自定义widget和数据绑定。相关参考文档,请参考以下链接:
Widget开发指南:https://docs.mendix.com/howto/extensibility/pluggable-widgets
Ant Design设计体系:https://ant.design/index-cn
更多信息,请访问以下链接:
Mendix官网:https://www.mendix.com/zh/
Mendix中国论坛:https://forum.mendix.tencent-cloud.com/
Mendix行业解决方案:https://solutions.mendix.com/
Mendix平台指南:https://www.mendix.com/evaluation-guide/
Mendix动画展示:https://www.mendix.com/demos/
谢谢阅读!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。