​在传统的企业应用架构设计中,不可避免需要涉及用户角色权限的设计,其中最为通用的模型是RBAC模型。RBAC(基于角色的访问控制)是指用户通过角色与权限进行关联。即一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户—角色—权限”的授权模型。在这种模型中,用户与角色之间、角色与权限之间,一般者是多对多的关系。很多架构师和开发者在使用Mendix的时候可能会有相同的疑虑,如何在Mendix上实现原有的企业用户角色权限模型?本案例的设计来源于润建股份有限公司数字平台研发院。数字平台研发院自2019年开始采用Mendix低代码平台进行企业信息系统开发和数字化建设,配备有40余人的研发团队;并在服务商的参与下,设计开发适用于企业客户的用户角色权限系统。

Mendix作为企业级的低代码平台,可以为客户带来符合企业预期的组织架构和用户角色权限管理功能。设计一套灵活的用户中心,实现用户角色权限的模块,简称UPMS(User Permission Management System)。主要实现三个需求点:

01. 用户基本信息管理CURD

02. 实现菜单管理

03. 实现用户数据操作权限

数据模型(Domain Model)设计

用户角色权限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权限。

Module角色设置

微流访问权限

页面访问权限

Entity访问权限

项目安全模型中,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用户角色权限设计思路相关推荐

  1. 用户角色权限设计思路

    http://blog.csdn.net/fmx121586/article/details/8025268 转载于:https://www.cnblogs.com/Vlaner/p/3564769. ...

  2. Web开发中的用户角色权限设计总结

    在Web开发中关于权限管理设计大抵涉及到两个方面:一:功能方面权限设计:二:资源方面权限设计.二者比较来看,功能方面权限的可重用性更高. 1.关于权限: 按照角色权限的最简单的设计 名称 描述 用户 ...

  3. java 权限管理与用户角色权限设计

    实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台 ...

  4. java用户角色权限管理 只显示姓_java权限管理与用户角色权限设计

    实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台 ...

  5. 设计OA系统的用户-角色-权限分配

    转载:http://www.cnblogs.com/jsping/archive/2013/01/23/2872972.html 设计OA系统的用户-角色-权限分配 一,前言  本文主要讲述在OA系统 ...

  6. 后台用户角色权限管理设计

    目录 1.概述 2.设计 2.1 用户管理 2.2 角色管理 2.3 权限管理 2.4 用户.角色.权限的关系 3.总结 1.概述 在设计产品后台系统设置时,可根据不同项目的实际需求来设计后台系统设置 ...

  7. 系统权限控制设计001---RBAC用户角色权限设计方案

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  8. 【深度解析RBAC用户-角色-权限设计方案,以及核心逻辑代码的讲解】

    首先对于b2b.b2c等这一些网站后台,一般情况下都需要权限管理的设计与实现,对于这部分,通常是固定不变的,每次只需要做少量的改动即可. 如何设计这几张表呢? RBAC(基于角色的访问控制),也就是用 ...

  9. 用户角色权限的简单理解

    用户角色权限,它们之间的关系是用户依赖于角色,角色依赖于权限.权限四个属性:增.删.改.查.角色不仅依赖于权限,还依赖于目标,也就是数据源,简单理解是这个角色可以访问哪些资源. 用户权限大致就分三个级 ...

最新文章

  1. 【FFmpeg】结构体详解(一):AVCodec、AVCodecContext、AVCodecParserContext、AVFrame、AVFormatContext 、AVIOContext
  2. 《评人工智能如何走向新阶段》后记(再续26)
  3. linux 死锁分析
  4. 【转】09.认识一下Qt用到的开发工具
  5. 正则表达式 python_Python正则表达式总结
  6. AngularJS 使用 Promise
  7. 2019.8.2闭包,作用域
  8. Dynamics AX2012 X++语言基础
  9. 30 张快速学习 Java 的思维导图
  10. opencv连接大华摄像头
  11. 华为手机怎么把计算机放到桌面,将华为手机投影到计算机屏幕
  12. 2019年全国一二线城市程序员工资大调查
  13. Linux内核子系统---内存管理子系统、进程管理子系统
  14. 如何在Mozilla Firefox中启用(或禁用)Cookie
  15. antv L7地图 绘制大小不受控制bug
  16. python软件要钱吗-python语言是免费还是收费的?
  17. C++之详解coredump
  18. junit测试service时一直报空指针异常
  19. StringBuilder.AppendFormat(String, Object, Object) 方法
  20. 计算机房挨着音乐教室用英语怎么说,四年级下册英语期末复习资料

热门文章

  1. 怎么把视频转换成音频?视频转音频方法分享。
  2. 解决Microsoft Office套件 配置注册表数据库损坏 问题【Office】
  3. python卡通滤镜_python 实现波浪滤镜特效
  4. 神经网络给图片生成标题,神经网络提取图片特征
  5. CSAPP-LAB3-Attack
  6. tcm工具 软件测试,如何使用 TCM? TCM 测试总结报告
  7. 腾讯回应「露露事件」;中国区iPhone热度下跌50%;软银计划16亿美元第三次投滴滴|雷锋早报...
  8. 实现Springboot下载Excel
  9. anaconda下载python很慢_win10用anaconda安装pytorch下载速度慢的问题解决
  10. CCF交通规划--SPFA和dist数组