一二三应用开发平台使用手册——系统管理-用户组-使用说明

embedded/2024/10/18 18:24:55/

概述

在RBAC模型中,资源、角色、用户三个关键元素,构成权限体系。在平台设计和实现的时候,以下几个核心问题思考如下:

角色,单层平铺还是树形结构?
在小型应用中,角色数量有限的情况下,单层平铺简单实用,但在大中型应用中,角色数量在几十个甚至上百个,如果依旧平铺则难以管理和使用。采用树形结构后,可以方便地添加虚拟节点(如角色分类)。

角色还是用户组
角色的称呼偏技术,对于业务用户而言,称为用户组更合适,即一组用户的集合;
业务意义上的岗位和职务,与传统意义的角色含义基本一致,如部门经理、固定资产接口人。
更改为树形结构后,可以进一步扩展其功能,例如,新建通讯(通知)组,将一部分人放到其下,可以供消息模块(短信、邮件、电话)等使用。
涉及到工作流集成,同样存在一部分流程中的环节处理人员,往往也是某些特定用户集合,并非出于功能权限分配目的,放到用户组角色里更合适。
换个角度想,传统意义上用于功能权限控制的角色,更适合作为用户组的一个分支,因此最终方案将平铺的角色,调整为树形结构的用户组

是否需要权限继承?
构建成树形结构后,面临一个新的问题,即是否要考虑权限继承问题,例如,给某一角色用户组)分配的某一权限,则其上级角色和权限自动也自动拥有了其权限,也就是通常意义上的员工有的权限,领导也自动有了,这么做看上去会减轻一定的权限初始化工作以及权限维护工作量,但实际上结果可能是相反的,增加权限维护的复杂性,并且某些业务功能并不适配这种模式。例如,某个底层功能,如班组作业,需要获取当前班组编码或数据,这个功能菜单,让部门经理打开会无法正常显示或使用。
上面这个例子,实际深入思考下,并不是权限继承机制的问题,而是使用这种机制,需要从全局好好规划角色,明确哪些角色是继承关系。班组成员和部门经理是上下级关系,但是从角色继承角度而言,并不应该存在继承关系。存在继承关系的角色,应该是部门管理员-》公司管理员-》集团管理员。
引入权限继承,会增加系统设计、实现、运维的复杂性,因此,不考虑权限继承问题,树形结构仅用于组织角色用户组)。

用户组规划
按照上述用户组的分类考虑,规划如下:
1.角色:传统意义上的岗位和职务,如部门经理、固定资产接口人,其下可以进一步分公共角色和专用角色,公共角色全局公用,如部门经理、固定资产接口人,每个部门都有该角色;专用角色往往是特定部门特定岗位才有的,如采样人员、巡检人员,可以在用户组下建组织机构虚拟节点,将这些专用角色挂靠在下面,更方便管理(使用角色时,不会显示在公共角色下,从而避免展示的总数量过多而影响选择)。
2.通讯组:预置的消息通知用户集合,可供消息模块(短信、邮件、电话)等使用,在某些业务事件发生时,如发生火灾,系统自动发送应急短信给通讯组用户。
3.流程岗位:工作流流程审批专用,如合同审查人员,会签人员,往往是为某条或某几条流程设置的人员集合,与管理上的岗位和职务没有很强的关联性,也不适合在常规功能权限分配是显示出来。
……

属性

  • 名称用户组的名字,核心属性。
  • 编码用户组的编码,应用程序中通过编码进行逻辑处理。
  • 上级:父级标识,形成树形结构的依据。
  • 状态:可以通过状态管理,停用或启用某个用户组

功能项

常规功能

新增:新增单条数据。
修改:修改单条数据。
删除:删除数据,这里的删除跟上文中的设置状态停用不同,是真正的删除(逻辑删除)。对于确认录入错误的数据,尚未被单据使用,应当彻底清理掉而不是将其状态设置为停用。删除时系统会清理用户组关联的用户数据和权限项数据,避免关联表中残留垃圾对应关系数据。
查询:多条件组合,模糊匹配当前系统中的数据。
查看:查看单条数据。
复制新增:以某条数据为基础,拷贝方式快速创建数据。

扩展功能

启用、停用:快速设置状态。
关联用户:调整用户组关联的用户,可移除与新增。
关联权限:调整用户组关联的权限项,可移除与新增。

注:考虑到用户组并不像组织机构和用户相对固化,而是一个动态维护的过程,因此未实现excel导入功能来实现初始化,后续视情况可考虑增加。

界面设计

列表查询

树形结构,采用左树右表的方式,左侧为用户组树,参与数据查询。点击树节点时自动查询选中用户组下属的用户组
右侧上方为查询区域,可灵活组合多种查询条件,筛选需要的数据。
此外,为应对全局搜索的需求场景,附加了一个“查询全部”的复选框,勾选后将忽略当前选择的用户组
image.png

新建/修改/查看

这三个功能界面差不多,操作上略有差异。
新建会打开空白表单,部分属性以默认值填充。
修改则会查询数据库,填充实体属性值,在此基础上修改。
查看也是查询数据库填充实体属性,但不能保存。
image.png

关联用户

可按组织机构、姓名、账号多维度搜索用户,查询结果默认显示已与当前用户组关联的用户,可单个或批量移除。也可以通过添加按钮将当前用户暂存到最右侧待添加区,保存后生效。
image.png

关联权限

树形结构显示系统当前权限项,遵循模块-实体-权限项的组织模式,勾选上级可批量选择下级,保存后生效。
image.png

开源平台资料

平台名称:一二三开发平台
简介: 企业级通用开发平台
设计资料:csdn专栏
开源地址:Gitee
开源协议:MIT
欢迎收藏、点赞、评论,你的支持是我前行的动力。


http://www.ppmy.cn/embedded/8591.html

相关文章

网络编程套接字

1.源IP和目的IP 在网络通信中,我们是将数据从一台主机发送到另一台主机上,而IP就是用于标识网络中的哪一台主机。就像生活中寄快递一样,我们给别人寄快递时,快递单号上会有,快递的源地址和目的地址。网络通信也是一样…

LeetCode in Python 704. Binary Search (二分查找)

二分查找是一种高效的查询方法&#xff0c;时间复杂度为O(nlogn)&#xff0c;本文给出二分查找的代码实现。 示例&#xff1a; 代码&#xff1a; class Solution:def search(self, nums, target):l, r 0, len(nums) - 1while l < r:mid (l r) // 2if nums[mid] > ta…

前端:防止重复请求的方案

前端&#xff1a;防止重复请求的方案 方案一、axios请求拦截器方案二、把相同的请求拦截掉方案三、&#xff08;最佳推荐&#xff09; 方案一、axios请求拦截器 通过使用 axios拦截器&#xff0c;在请求拦截器中开启全屏Loading&#xff0c;然后再响应拦截器中关闭。 import …

mysql面试题五(事务)

目录 1.mysql有哪些锁及作用 1. 行锁&#xff08;Row Locks&#xff09; 2. 间隙锁&#xff08;Gap Locks&#xff09; 3. Next-Key Locks 4. 意向锁&#xff08;Intention Locks&#xff09; 5. 表锁&#xff08;Table Locks&#xff09; 6. 元数据锁&#xff08;Metad…

Ts类型体操详讲 之 extends infer (上)

目录 1、数组类型 &#xff08;1&#xff09;提取数组中的第一个元素 &#xff08;2&#xff09;提取数组中最后一个元素 &#xff08;3&#xff09;提取数组中间部分的元素 2、字符串类型 &#xff08;1&#xff09;是否以某个前缀开头 &#xff08;2&#xff09;提取传…

本地搭建属于你自己的AI搜索引擎 支持多家AI模型

FreeAskInternet 是一个完全免费、私有且本地运行的搜索聚合器&#xff0c;并使用 MULTI LLM 生成答案&#xff0c;无需 GPU。用户可以提出问题&#xff0c;系统将进行多引擎搜索&#xff0c;并将搜索结果合并到LLM中&#xff0c;并根据搜索结果生成答案。全部免费使用。 项目…

2023第十四届蓝桥杯省赛C++A组:平方差

题目很简单 直接上代码 代码 #include<bits/stdc.h> using namespace std; int main() {int L, R;cin >> L >> R;int count 0;for (int i L; i < R; i) {if (i % 4 ! 2)count;if (i 4 < R){i 4;count 3;}}cout << count; }

markdown文件语法

标题 一级标题&#xff1a;# 标题名称 二级标题&#xff1a;## 标题名称 三级标题&#xff1a;### 标题名称 加粗 **markdown文件语法学习** 插入图片 方式1 ![图片描述](图片地址) 方式2 <figure><img src"图片地址" alt"图片描述"><fig…