Mendix用户角色权限设计思路
在传统的企业应用架构设计中,不可避免需要涉及用户角色权限的设计,其中最为通用的模型是RBAC模型。RBAC(基于角色的访问控制)是指用户通过角色与权限进行关联。即一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户—角色—权限”的授权模型。在这种模型中,用户与角色之间、角色与权限之间,一般者是多对多的关系。很多架构师和开发者在使用Mendix的时候可能会有相同的疑虑,如何在Mendix上实现原有的企业用户角色权限模型?本案例的设计来源于润建股份有限公司数字平台研发院。数字平台研发院自2019年开始采用Mendix低代码平台进行企业信息系统开发和数字化建设,配备有40余人的研发团队;并在服务商的参与下,设计开发适用于企业客户的用户角色权限系统。
Mendix作为企业级的低代码平台,可以为客户带来符合企业预期的组织架构和用户角色权限管理功能。设计一套灵活的用户中心,实现用户角色权限的模块,简称UPMS(User Permission Management System)。主要实现三个需求点:
01. 用户基本信息管理CURD
02. 实现菜单管理
03. 实现用户数据操作权限
数据模型(Domain Model)设计
User实体是用户模型的核心实体,串联着组织-角色和菜单的关系,关键实体关联关系:
各个关键实体都配置一个临时Helper实体,用于在Table的操作中,辅助主实体做数据查询和操作,如选中某行数据记录,或选中树节点时通过传递AutoID,设置为Helper中的SelectedId字段,关联到对应的实体数据。
管理CURD页面
根据数据模型,设计组织架构、用户中心、用户角色管理、菜单管理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的操作,点击保存后对实体的修改进行提交。
安全(Security)模型
对于权限模块的安全模型,可以设置两个基础角色,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/
谢谢阅读!
Mendix用户角色权限设计思路相关推荐
- 用户角色权限设计思路
http://blog.csdn.net/fmx121586/article/details/8025268 转载于:https://www.cnblogs.com/Vlaner/p/3564769. ...
- Web开发中的用户角色权限设计总结
在Web开发中关于权限管理设计大抵涉及到两个方面:一:功能方面权限设计:二:资源方面权限设计.二者比较来看,功能方面权限的可重用性更高. 1.关于权限: 按照角色权限的最简单的设计 名称 描述 用户 ...
- java 权限管理与用户角色权限设计
实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台 ...
- java用户角色权限管理 只显示姓_java权限管理与用户角色权限设计
实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台 ...
- 设计OA系统的用户-角色-权限分配
转载:http://www.cnblogs.com/jsping/archive/2013/01/23/2872972.html 设计OA系统的用户-角色-权限分配 一,前言 本文主要讲述在OA系统 ...
- 后台用户角色权限管理设计
目录 1.概述 2.设计 2.1 用户管理 2.2 角色管理 2.3 权限管理 2.4 用户.角色.权限的关系 3.总结 1.概述 在设计产品后台系统设置时,可根据不同项目的实际需求来设计后台系统设置 ...
- 系统权限控制设计001---RBAC用户角色权限设计方案
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- 【深度解析RBAC用户-角色-权限设计方案,以及核心逻辑代码的讲解】
首先对于b2b.b2c等这一些网站后台,一般情况下都需要权限管理的设计与实现,对于这部分,通常是固定不变的,每次只需要做少量的改动即可. 如何设计这几张表呢? RBAC(基于角色的访问控制),也就是用 ...
- 用户角色权限的简单理解
用户角色权限,它们之间的关系是用户依赖于角色,角色依赖于权限.权限四个属性:增.删.改.查.角色不仅依赖于权限,还依赖于目标,也就是数据源,简单理解是这个角色可以访问哪些资源. 用户权限大致就分三个级 ...
最新文章
- 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext
- 《评人工智能如何走向新阶段》后记(再续26)
- linux 死锁分析
- 【转】09.认识一下Qt用到的开发工具
- 正则表达式 python_Python正则表达式总结
- AngularJS 使用 Promise
- 2019.8.2闭包,作用域
- Dynamics AX2012 X++语言基础
- 30 张快速学习 Java 的思维导图
- opencv连接大华摄像头
- 华为手机怎么把计算机放到桌面,将华为手机投影到计算机屏幕
- 2019年全国一二线城市程序员工资大调查
- Linux内核子系统---内存管理子系统、进程管理子系统
- 如何在Mozilla Firefox中启用(或禁用)Cookie
- antv L7地图 绘制大小不受控制bug
- python软件要钱吗-python语言是免费还是收费的?
- C++之详解coredump
- junit测试service时一直报空指针异常
- StringBuilder.AppendFormat(String, Object, Object) 方法
- 计算机房挨着音乐教室用英语怎么说,四年级下册英语期末复习资料
热门文章
- 怎么把视频转换成音频?视频转音频方法分享。
- 解决Microsoft Office套件 配置注册表数据库损坏 问题【Office】
- python卡通滤镜_python 实现波浪滤镜特效
- 神经网络给图片生成标题,神经网络提取图片特征
- CSAPP-LAB3-Attack
- tcm工具 软件测试,如何使用 TCM? TCM 测试总结报告
- 腾讯回应「露露事件」;中国区iPhone热度下跌50%;软银计划16亿美元第三次投滴滴|雷锋早报...
- 实现Springboot下载Excel
- anaconda下载python很慢_win10用anaconda安装pytorch下载速度慢的问题解决
- CCF交通规划--SPFA和dist数组