当前位置:网站首页>MASA Auth - 从用户的角度看整体设计
MASA Auth - 从用户的角度看整体设计
2022-06-13 03:21:00 【MASA team】
用户
在系统里,用户是一个核心概念。它代表了一个人的唯一身份标识,除了与角色、团队、组织架构等有关,甚至还会影响到在同一个界面不同的用户操作流程与显示内容都会发生变化,再复杂一点的话,或许在同一个系统内的一个用户进入到不同产品后的身份也会变化
用户与角色
用户可以拥有一个或多个角色,让角色作为权限组,将一组或多组权限间接的分配给用户
用户与团队
用户可以在多个团队中,每个团队可以拥有一个或多个角色,将一组或多组权限通过角色与团队关联,并赋予团队内的成员
团队内成员可以是内部的,也可以是外部的。通过统一的用户表作为人的唯一身份标识。再通过Employee和ThirdPartyUser区分用户身份属性。
用户与组织架构
用户可以被指定在组织架构的某一个节点中
但组织架构是一个虚拟的树形结构,它归属于业务,所以没有与权限直接关联
除此之外,组织架构有时候很难表示角色继承关系。在同一个组织架构节点中的不同成员常常会具有不同的角色,且上下级关系也未必会作为上下级节点紧贴在一起。有部分公司上下级之间可能隔了几个层级
组织架构在我们早期定义中是与权限关联且没有团队这个概念的。但实际上项目制在很多公司内部都存在,以项目制运行时,人员的权限和虚拟组织关系会频繁变化。导致常常要在组织架构调整和大量个人权限微调上做抉择,为了彻底解决这种割裂的行为。我们把组织架构看作虚拟的树形结构来描述每个人的部门归属权,同时采用团队的方式解决项目制下人员频繁进出和四处作战而引发的权限变更问题
用户与权限
用户除了拥有角色以外,可能还存在个别特殊业务下需要临时性授予或禁用部分权限
虽然与RBAC2有一点冲突,但事实上这样的场景的确存在,比如即将离职的财务需要临时收回付款功能,这里明显要违背互斥原则,在设计上我们的选择是扩展权限的优先级高于角色内包含的权限。这样可以通过对冲达到收回部分敏感权限的功能
用户类型
用户有三种类型:终端用户,员工,驻场员工
举个例子:
- A是公司员工,拥有内部权限。同时也是公司产品的终端用户
- B是驻场员工,拥有部分内部权限。同时也是公司产品的终端用户
用户权限优先级
用户的权限应该具有一定的优先级,来解决同一个业务下多个权限同时生效时系统该选择激活哪一个
我们将采用以下规则:
超级管理员/管理员
超级管理员为系统管理员,管理员为指定项目的管理员
用户的扩展配置权限
用户的角色权限
用户的角色权限冲突时,拒绝优先级高于允许,低于用户的扩展配置权限
团队的默认角色权限
团队中的父级角色权限
将来在团队支持上下级关系后,当前用户没有被分配到权限,且当前团队存在父级时将向上递归查找距离最近的默认角色来获得权限列表
用户权限类型
用户的权限类型大概分为四类
菜单:是否可以通过菜单访问某个页面
页面元素:是否可以对页面内的元素进行操作,如按钮。页面元素需要挂在菜单下
数据:是否显示指定字段。数据需要挂在菜单下
数据与页面元素类似,但与页面元素之间相互独立
API:是否可以访问指定API。API一般需要挂在菜单或页面元素下,如有需要也可以挂在数据下
权限层级
总结
至此,我们从一个用户的角度将角色和权限,前端与后端都串联了起来。但到目前为止还是概念的梳理阶段,做好一个权限中心很难。每个团队有自己的管理方式,如何在不同的团队需求中摘取到共同点把主线串联起来,既能满足绝大部分场景需求又留有扩展余地仍然需要时间去验证。
(本文章不代表最终设计)
参考:
https://uxdesign.cc/design-permissions-for-a-saas-app-db6c1825f20e
开源地址
MASA.BuildingBlocks:https://github.com/masastack/MASA.BuildingBlocks
MASA.Contrib:https://github.com/masastack/MASA.Contrib
MASA.Utils:https://github.com/masastack/MASA.Utils
MASA.EShop:https://github.com/masalabs/MASA.EShop
MASA.Blazor:https://github.com/BlazorComponent/MASA.Blazor
如果你对我们的 MASA Framework 感兴趣,无论是代码贡献、使用、提 Issue,欢迎联系我们
边栏推荐
- How to write product requirements documents
- Vs Code modify default terminal_ Modify the default terminal opened by vs Code
- Wechat applet coordinate location interface usage (II) map interface
- Pytorch record: pytorch variables parameter and buffer. self. register_ buffer()、self. register_ parameter()
- Delete the number of a range in the linked list
- 2021-08-30 distributed cluster
- The use of curl in PHP
- MySQL 8.0 installation free configuration method
- Add Yum source to install php74
- Summary of rust language practice
猜你喜欢
This article takes you to learn DDD, basic introduction
Vs Code modify default terminal_ Modify the default terminal opened by vs Code
Loading process of [JVM series 3] classes
Patrick Pichette, partner of inovia, former chief financial officer of Google and current chairman of twitter, joined the board of directors of neo4j
The extra money we made in those years
MySQL index bottom layer (I)
Wechat applet coordinate location interface usage (II) map interface
Keil去掉烦人的ST-Link更新提示
Data Governance Series 1: data governance framework [interpretation and analysis]
2-year experience summary to tell you how to do a good job in project management
随机推荐
MySQL 8.0 installation free configuration method
MySQL create user authorization remote access
Scala implements workcount
Parallel one degree relation query
The extra money we made in those years
Using linked list to find set union
Introduction to Kestrel_ Introduction to kestrel web server
2022.05.29
Beginner development process_ Project development FAQs
On the limit problem of compound function
MySQL index bottom layer (I)
Level II C test skills
Use of jstack
JVM class loader (2)
Quickly obtain the attributes of the sub graph root node
Use of interceptors webmvcconfigurer
Typical application of ACL
简述:分布式CAP理论和BASE理论
How to become a technological bull -- from the bull man
A personal understanding of interpreted and compiled languages