用户

在系统里,用户是一个核心概念。它代表了一个人的唯一身份标识,除了与角色、团队、组织架构等有关,甚至还会影响到在同一个界面不同的用户操作流程与显示内容都会发生变化,再复杂一点的话,或许在同一个系统内的一个用户进入到不同产品后的身份也会变化

用户与角色

用户可以拥有一个或多个角色,让角色作为权限组,将一组或多组权限间接的分配给用户

用户与团队

用户可以在多个团队中,每个团队可以拥有一个或多个角色,将一组或多组权限通过角色与团队关联,并赋予团队内的成员

团队内成员可以是内部的,也可以是外部的。通过统一的用户表作为人的唯一身份标识。再通过Employee和ThirdPartyUser区分用户身份属性。

用户与组织架构

用户可以被指定在组织架构的某一个节点中

但组织架构是一个虚拟的树形结构,它归属于业务,所以没有与权限直接关联

除此之外,组织架构有时候很难表示角色继承关系。在同一个组织架构节点中的不同成员常常会具有不同的角色,且上下级关系也未必会作为上下级节点紧贴在一起。有部分公司上下级之间可能隔了几个层级

组织架构在我们早期定义中是与权限关联且没有团队这个概念的。但实际上项目制在很多公司内部都存在,以项目制运行时,人员的权限和虚拟组织关系会频繁变化。导致常常要在组织架构调整和大量个人权限微调上做抉择,为了彻底解决这种割裂的行为。我们把组织架构看作虚拟的树形结构来描述每个人的部门归属权,同时采用团队的方式解决项目制下人员频繁进出和四处作战而引发的权限变更问题

用户与权限

用户除了拥有角色以外,可能还存在个别特殊业务下需要临时性授予或禁用部分权限

虽然与RBAC2有一点冲突,但事实上这样的场景的确存在,比如即将离职的财务需要临时收回付款功能,这里明显要违背互斥原则,在设计上我们的选择是扩展权限的优先级高于角色内包含的权限。这样可以通过对冲达到收回部分敏感权限的功能

用户类型

用户有三种类型:终端用户,员工,驻场员工

举个例子:

  • A是公司员工,拥有内部权限。同时也是公司产品的终端用户
  • B是驻场员工,拥有部分内部权限。同时也是公司产品的终端用户

用户权限优先级

用户的权限应该具有一定的优先级,来解决同一个业务下多个权限同时生效时系统该选择激活哪一个

我们将采用以下规则:

  1. 超级管理员/管理员

    超级管理员为系统管理员,管理员为指定项目的管理员

  2. 用户的扩展配置权限

  3. 用户的角色权限

    用户的角色权限冲突时,拒绝优先级高于允许,低于用户的扩展配置权限

  4. 团队的默认角色权限

  5. 团队中的父级角色权限

    将来在团队支持上下级关系后,当前用户没有被分配到权限,且当前团队存在父级时将向上递归查找距离最近的默认角色来获得权限列表

用户权限类型

用户的权限类型大概分为四类

  • 菜单:是否可以通过菜单访问某个页面

  • 页面元素:是否可以对页面内的元素进行操作,如按钮。页面元素需要挂在菜单下

  • 数据:是否显示指定字段。数据需要挂在菜单下

    数据与页面元素类似,但与页面元素之间相互独立

  • 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,欢迎联系我们

MASA Auth - 从用户的角度看整体设计的更多相关文章

  1. 翻译 – 从心理学角度看UX设计

    本文是一篇非常不错的关于用户体验设计的文章,本文作者是一个心理学家,他从他所研究的领域去看到用户行为,用户体验,相信会给你带来不一样的观念与知识.翻译水平有限,若有不准确之处欢迎指正. ——————— ...

  2. 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』

    作者:阿里云用户mr_wid ,z)NKt#   @I6A9do   如果感觉该评测对您有所帮助, 欢迎投票给本文: UO<claV   RsfTUb)<   投票标题:  28.[阿里云 ...

  3. Android IOS WebRTC 音视频开发总结(四八)-- 从商业和技术的角度看视频行业的机会

    本文主要从不同角度介绍视频行业的机会,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,欢迎关注个人微信公众号blacker ----------------------------- ...

  4. Java工程(3)——但从谈论用户的角度UI图案

    前言: 海南项目宣告竣工,验收之日,除部分代码有待优化外,亟待改进的就是界面. 米老师说:连你都忍不住去拖下滚动栏,你还指望用户用的舒坦吗? 顿悟: 业务.功能也许是软件的核心,技术也许是软件的精髓. ...

  5. [置顶] 从引爆点的角度看360随身wifi的发展

    从引爆点的角度看360随身wifi的发展 不到一个月的时间,随身wifi预定量就数百万.它的引爆点在哪里,为什么相同的产品这么多它却能火起来,通过对随身wifi的了解和我知识层面分析,主要是因为随身w ...

  6. 从互联网进化的角度看AI+时代的巨头竞争

    今天几乎所有的互联网公司在谈论和布局人工智能,收购相关企业.人工智能和AI+成为当今科技领域最灸手可热的名词,关于什么是AI+,其概念就是用以表达将"人工智能"作为当前行业科技化发 ...

  7. 从一个开发的角度看负载均衡和LVS--FullNat

    从一个开发的角度看负载均衡和LVS 在大规模互联网应用中,负载均衡设备是必不可少的一个节点,源于互联网应用的高并发和大流量的冲击压力,我们通常会在服务端部署多个无状态的应用服务器和若干有状态的存储服务 ...

  8. 【转载】从创业者角度看《印度合伙人 Padman》后的一点感受

    ***************************** 这部电影看简介是真实事件改编的,当时除了电影本身的精彩和主角宠妻狂魔之外,印象最深的就是感觉到主角的创业者心态是一步步在生活中被培养的.特别 ...

  9. 【转】使用者角度看bionic pthread_mutex和linux futex实现

    使用者角度看bionic pthread_mutex和linux futex实现 本文所大篇幅引用的参考文章主要描述针对glibc和pthread实现:而本文的考察代码主要是android的bioni ...

随机推荐

  1. 集合框架基础三——Map

    Map接口  * 将键映射到值的对象  * 一个映射不能包含重复的键  * 每个键最多只能映射到一个值 Map接口和Collection接口的不同 * Map是双列的,Collection是单列的 * ...

  2. Typora 设置图片自动上传

    使用 PicGo-Core(command line) 下载 PicGo-Core 依次点击 文件 -> 偏好设置 -> 图像 来到下图所示界面: 点击①位置选择 PicGo-Gore(c ...

  3. drf认证、权限、限流

    认证Authentication(5星) 认证逻辑及编写步骤 逻辑 认证类:用来校验用户是否登录,如果登录了,继续往下走,如果没有登录,直接返回 编写步骤 -第一步:写一个类,继承BaseAuthen ...

  4. 5.Docker容器学习之新手进阶使用

    @ 原文地址:点击直达 学习参考:https://yeasy.gitbooks.io/docker_practice/repository/registry.html 0x00 前言简述 描述: 本章 ...

  5. zabbix监控SSL证书有效期

    想给公司网站加上证书的监控,发现agent无此监控项.科普之后发现需要自行添加脚本以及一些操作. 环境信息 系统版本: Ubuntu20.04 zabbix server版本:5.4 (这个自定义貌似 ...

  6. Java学习day13

    泛型类格式: 修饰符 class 类名<类型>{ } 常用T.E.K.V等形式的参数表示泛型 使用方式与C++的类模板相似,在创建对象时要明确数据类型 泛型方法定义格式: 修饰符<类 ...

  7. SpringMVC初学习

    # SpringMVC快速入门 @[TOC](文章目录) --- # 前言 `提示:这里可以添加本文要记录的大概内容:` 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习 ...

  8. 解构华为云HE2E项目中的容器技术应用

    摘要:本文从容器技术应用的角度解构了HE2E项目的代码仓库配置.镜像构建.及docker-compose的部署方式.希望通过本篇文章分享可以使更多的开发者了解容器技术和华为云. 本文分享自华为云社区& ...

  9. Vue 组件实战

    目录 Vue 组件 axios实现数据请求 计算属性 案例一:首字母大写 案例二:过滤案例 监听属性 局部组件 全局组件 组件通信之父传子 组件通信之子传父 ref属性(组件间通信) 普通标签使用 组 ...

  10. UML的三项基础

    UML的定义 UML语义:描述基于UML的精确元模型定义. UML表示法:定义UML符号和文本语法提供标准. 五类模型图 用例视图:用例图 逻辑视图:类图.对象图.包图(我把包放在一起的图) 静态视图 ...