如何设计网站权限系统?

232 2023-11-25 03:43

一、如何设计网站权限系统?

权限设计其实现方法千遍万化,但是本质主要要看你设计者是否考虑清楚了

  • 权限颗粒度;
  • 数据权限与功能权限的区分。

这里我引用我的一篇专栏文章具体来说:


一.权限体系简介

权限管理是一个几乎所有大中型B端系统的都会涉及的一个重要组成部分,主要目的是对整个后台管理系统进行权限的控制,而针对的对象是员工,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,数据泄露等问题。

抽象来看权限体系可以分为如下两类:功能权限与数据权限两部分。

  • 功能权限:指的是在系统中的一系列操作。常见的如:删除,编辑,提交等
  • 数据权限:指数据中存在的数据是否能查看,如:钉钉中个人的出勤数据每人能看到,但是全公司的考勤数据却只有管理员能看到。

在这里权限的实现一共有两种模式:

“所见即所得”模式

用最通俗的话来说也就是,能看见相关操作就能执行对应的操作,所有的权限限制就在隐藏对应的操作页或按钮上,不进行区分查看与操作。

例如一个项目管理软件,当用户拥有了访问项目操作页的权限,在本模式里该项目的增删改查都对应拥有了,这里的核心就是只要能看到就能操作。

这个模式的好处是适合中小型B端客户,其本身没有复杂的岗位划分且要求系统简单易上手,毕竟一款B端的产品要是权限让用户配置半个小时,这对用户来说是个无比巨大的负担。

根据我的经验来看“所见即所得”这种模式基本满足80%的SaaS系统对权限管理的需求。

“读写分离”模式

所谓的读写分离,就是在第一种模式上进行了升级(这里的写泛指一切关于某模块的操作)。

怎么理解呢?当我们拥有了进入该页面的权限时,如果没有分配写的权限,就算看到了这些操作也不能使用。这种模式多用在数据权限上,而功能权限上是多用于预告给用户,只有当用户完成指定条件时才可以去操作。如未完成指定信息填写时,不能点击提交,但是提交按钮必须要在页面出现。

如果让我们用一张图来阐明这两种权限的设计体系的话,应该是这个样子的:

图:权限颗粒度二.功能权限设计具体来说我们可以划分为如下三步

图:设计步骤让我们一步步来看:步骤1:功能点封装这里就是将我们系统中的功能进行梳理,得出一颗完整的功能树。你的权限系统想要控制到哪一层级,就将功能拆分到对应的层级即可。例如:

图:功能拆分示例步骤2:权限授予在拆分完功能点后,我们就相当于有了一个完整的系统权限表(也称之为权限池),可以清楚的告诉用户什么环节可以进行配置,接下来我们需要设计的就是如何让用户去分配权限,即:权限授予。在权限授予上我们要满足如下两个基本方向的设计:

  • 角色概念:角色的理解,我们可以简单的理解为是一个个权限的集合。它通过提前将一部分权限进行配置成通用模板,随后只需将需要的人员授予这个角色就能拥有对应的权限。
  • 权限池内自定义授予:在SaaS软件里经常我们会遇到这样的情况,之前我们配置的某某部门经理或助理的角色由于临时性工作借调可能会涉及多个岗位的工作,从而导致之前的角色权限不能满足,而此时这种个例现象又不好再单独创建角色给他,因此需要能在角色外再单独指派权限的功能。这里我们就称之为权限池内自定义授予。当然这里也适用于不在角色表中的任意权限分配。

值得提一句的是:一般的权限系统中要支持一人授予多个角色的功能。步骤3:权限累加器想必在步骤2大家肯定有疑问了,一人可以承接多个角色,又可以自定义额外权限,这样到最后个人权限要怎么定呢?这里的权限累加器其实就是在解决这个问题,这里相当于是一个单独权限计算器,通过将前后授予的权限进行累加得到用户的最终权限。这里的计算规则如下:

  • 计算1:将变动前的权限集合在被授予新权限集合后两者取并集,去重相同的权限;
  • 计算2:最终权限 = 角色权限 + 权限池内自定义授予权限

在一般权限授予中,我们给予权限一般都是越给越多。但是也有可能会是将某一角色的权限进行统一减少,此时我们就需要交由累加器帮我们去批量将多个拥有该角色的权限进行计算。举个例来看:

在上面的例子中,我们的权限体系在上面进行了三次变动:第一次:U298,278两位用户获得了初始员工权限并给予了发布新闻权限,此时由权限累加器帮我们计算出共拥有了7个权限;第二次:新增了两位用户,并将四位用户在员工角色上又增加了部门助理角色,并额外增加了数据查看权限,此时权限累加器计算出这四位用户权限数为:员工角色与部门助理的权限相同权限6项 + 部门助理独有的4项权限 + 发布新闻权限 + 数据权限 = 12项;第三次:四位用户的共有角色部门助理被减去了一个权限,此时权限累加器计算出这四位用户权限数为11;

看到这基本的设计思路,想必应该清楚了吧,如果有兴趣可以看我的专栏里面有权限部分的实现案例:

三爷:为啥别人家SaaS就是好用——权限体系设计实战分析

下面说点友情话,年后马上到金三银四找工作的时间了送个福利给各位产品人:

三爷:写给年后换工作的你:如何“理解”一份打动面试官的PRD

如果想看更多产品设计的核心教程或者在初级产品经理岗位徘徊了好久没有出路的同学都可以直接关注我的专栏:

高阶产品经理进修之路

二、系统架构师含金量?

系统架构师还是有一定含金量的,能获得系统架构师证书是不容易的

我从事软件开发多年,也带软件团队多年,对系统架构师考试涉及到的内容还是高度认可的

多年来我跟很多架构师合作过,自己也做架构设计多年,据我了解大部分架构师都是从大量的项目中锻炼出来的,很少有拿着架构师证书企业就让你做架构师的

但是很多企业在培养架构师的时候会要求这些准架构师们考一下系统架构师证书,这对架构师的整体素质培养还是有较大帮助的

架构师考试涵盖的内容十分广泛,几乎涉及到软件设计的方方面面,从网络基础到图的设计,从安全到设计模式,从分布式框架到,这些内容也都是架构师必须掌握的内容

三、后台管理权限系统设计:1、怎么满足用户随意添加的权限要求?随意扩展角色的权限或补充权限?

三个模块搭建后台用户角色权限管理系统

  • 用户角色权限系统说明
  • 用户角色权限系统建设的三大模块
  • 案例分析
  • Q&A

第一章:用户角色权限系统说明

1. RBAC权限设计模型

  • RBAC:

(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联,从而获得某些功能的使用权限。权限被赋予给角色,而不是用户,但是一个用户可以拥有若干个角色,当一个角色被赋予给某一个用户时,此用户就拥有了该角色所包含的功能权限。简单地说,一个用户拥有若干角色,每一个角色拥有若干功能权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

2. 三大模块搭建后台用户角色权限系统

如上所述,一个后台的用户角色权限系统总是可以大概划分为三个打的模块的:用户管理、角色管理、权限管理。用户管理往往随着行政部门划分或者随着业务线部门划分,对应部门或者小组内的用户有着基本相似的功能需求和权限等级;角色管理相对来讲更加固定,它往往是基于业务管理需求而预先在系统中设定好的角色标签,一般不会随意更改,更像是一个用户分组标签;权限管理内容相对更加庞杂和丰富,主要包含了目标、操作和许可权三个部分,当某一功能权限授权给用户时,也就相当于为该用户开通了可以操作某个目标功能的许可权。

角色权限系统属于策略设计的范畴,它的设计非常考验一个PM对业务的理解力以及对自己后台所有功能的熟悉程度。做角色权限系统之前一定要先深度了解业务流程以及后台的所有功能模块,在不了解的情况下,多向相关同事请教,避免角色权限系统设计过程中出差错和逻辑漏洞。

第二章:用户角色权限系统建设的三大模块

1. 用户管理

  • 用户管理中的用户主要是功能系统的使用者,这些用户是一个一个的员工个体,这些个体往往从两个维度来进行划分:行政关系(部门架构)、业务部门(业务架构)。用户管理就是在此两个维度来给员工个体进行关联性的初步分群或者分组。按照行政部门或者按照业务线部门划分后,对应部门或者小组内的用户有着基本相似的系统功能使用需求和权限等级;

2. 角色管理

  • 角色管理:

角色往往是基于业务管理需求而预先在系统中设定好的固定标签,每个角色对应明确的系统权限,其所拥有的系统权限一般不会随意更改,并且角色也不会随着用户的被添加和被移除而进行改变,相较于用户管理而言更加稳定;

  • 自动赋权:用户自动进入角色

如果角色与行政关系下的组织部门存在绑定关系,那么如果一个用户进入到该组织部门后,该用户会自动被加入到对应的角色中,并且拥有该角色所有的系统权限。如一个财务人员【小张】入职财务部后,那么该用户无需进行额外的授权即可在对应财务报表系统查看该部门员工可查看的财务数据报表和对应的操作权限(比如操作财务审批等);

  • 角色赋权:用户被添加进角色

业务是不断创新和发展的,随着业务的发展,会有越来越多的新的角色被设置和创建,比如公司新启动了一个企业团餐项目,项目部横向的从各个部门找了多个员工组建项目团队,并且该项目的业务权限也只是授权给这批员工可查看和操作,那么,在此项目中,会产生一个新的角色 “ 财务1 ”,系统高级管理员会把从财务部门选中的财务【小张】添加到“ 财务1 ”这个角色中,那么【小张】即可获得查看企业团餐项目业务数据报表和操作的权限。这种权限的授予无法通过用户行政关系的自动绑定来实现;

  • 角色继承:角色权限的继承

权限可以是独有的,也可以是继承的。每个角色都有自己的权限集,角色继承其实也就是继承父系角色的权限,一般角色在继承其父系角色的全部权限的基础上增加拥有一些自己的权限。而系统角色继承往往存在于用户分级管理比较明确的团队或者公司;

  • 角色互斥:角色包含的权限互斥

角色互斥的业务背景:当一个业务流程由于风控的原因,需要将其操作给划分成分开的几个步骤时,需要给这几个不同的步骤授权不同的角色,并且这些角色之间需要进行互斥。比如大额财务报销审批流程,财务人员【小张】拥有了审批人权限后,就无法将审核确认的权限再授予小张,以此来规避一个人完成大额报销而带来的财务风险;

  • 临时角色:

临时角色往往是针对特殊群体设置的,比如公司有特殊访问团队莅临,需要给这些特殊的客户一些临时身份来体验某些功能操作。那么把这些人添加到部门的组织架构中显然是不合适的,因为这些人只是临时的摆放者,不是企业员工;其次,这些客户需要体验的功能操作往往是横跨多个业务模块和产品线的(比较繁杂),一般公司并没有现成的固定角色符合拥有客户所需的全部操作权限,因此需要给这些客户开设临时角色,并且支持给临时角色最大的权限选择空间;

  • 黑白名单

3. 权限管理

  • 权限管理:

权限管理更多是从功能菜单、功能操作、数据参数三个不同颗粒度等级来考量的。具体颗粒度的大小视公司结构和团队规模而定,如果不是业务属性一定要求将权限控制到非常精细的级别,其实就没有必要将权限的颗粒度拆分到具体某一项操作或者某一个按钮,毕竟后台产品的核心是业务管理平台,主要目标是辅助业务的管理和推进。

  • 功能菜单权限:

对于后台产品来讲,针对功能菜单来划分用户权限其实是比较粗颗粒度的一种管理方式,这种模式下用户一旦获得授权即可使用该菜单栏下的全部数据查看权限和功能操作权限;

  • 功能操作权限:

功能操作层级的权限相对于功能菜单会更为深入,这种情况下,不同角色的用户可以进入同一菜单页后台查看相同的数据字段信息,但是他们可执行的功能操作不同;

  • 数据字段权限:

数据字段层面是较细颗粒度的拆分,他会实现不同角色用户在进入同一菜单页后台时,可见的数据字段都有差异。比如销售人员进入某销售业绩管理后台时,可以看到自己的业绩提升数据,但是财务人员看到的是业务工单的费用字段,这些字段共存在一个菜单页中,只是受限于不同的角色权限而已。

第三章:案例分析

1. 促销活动权限系统权限对接

  • 促销活动后台接入权限系统前:

在促销活动后台接入权限系统之前,几乎全部的系统权限都处于裸奔的状态,所有人业务线成员都可以查看该后台的运营活动内容和运营结果数据,并且可以执行相对敏感的操作。这种情况显然是存在一定的管理风险的,因此该后台系统需要对接权限管理系统进行系统化管理和风险控制;

  • 促销活动后台接入权限系统时:

促销活动在接入权限管理系统过程中,需要拆解该功能模块的权限元素(到一定颗粒度),因此需要根据业务特征来判断需要拆分的颗粒度,是到功能菜单、功能操作还是数据字段的级别,明确拆分颗粒度之后,权限管理系统才可以给不同角色按照颗粒度授予权限;

  • 促销活动后台接入权限系统后:

促销活动在接入权限管理系统过程后,当对应角色的用户再次登录这个后台时,首先后台会校验该用户的角色是否拥有该功能模块的权限,以及该角色权限对应的操作权限和数据字段权限,校验结果经服务端处理会在产品端展示给用户可见。这个时候,同一用户再该后台可见和可执行的操作与接入权限管理系统之前可能有很大的不同,这就是基于用户角色的权限管理系统带来的改变。

Q&A:

1. 一个用户拥有多个角色,多角色之间如果存在互斥关系如何处理?

  • 如果一个用户已经被添加到某一角色范围下,那么,当给该用户添加一个与当前角色存在权限互斥关系的角色时,系统会进行互斥性判断,后面的角色就无法给该用户添加成功;

2. 业务发展过程中,如何保证不同角色之间权限拆分清晰?

  • 随着业务的快速发展,一定会不断新增不同的角色和更多的功能模块,而且这些角色和功能权限之间的关系也会日益混乱,这个时候需要产品经理和业务方一起,及时的面对业务的发展变化,及时、快速的梳理业务调整范围,作出对应的改变;

3. 用户权限管理系统核心难点是前期的产品设计吗?

  • 用户权限管理系统核最难的不是前期的产品设计,而是后续的运营维护,因为权限系统的结构往往不会随意变更,但是随着业务发展快速出现的角色和功能模块,为了防止角色和功能权限之间的关系变得混乱,在建立新的角色和分配权限的时候需要思路清晰且慎重调整。

四、系统架构师备考经验?

备考经验

综合知识

坚持在电脑或手机上通过希赛的web端或app刷“每日一练”。

考前集中针对错题库反复练习,直至彻底搞清楚之后,把错题库清零。

刷题可以保证出过的往年的类似的题目再出的时候可以做对,但在临场的时候还是会有一些自己没见过的创新性的题目,以今年的架构考试为例,这样的题目还不占少数,所以现场要多思考,利用排除法等技巧灵活应对。

五、系统架构师考试攻略?

要准备系统架构师考试,首先要深入了解系统架构的基本原理和概念。掌握常见的架构模式和设计原则,如分层架构、微服务架构等。

熟悉常用的架构工具和技术,如UML建模、设计模式等。

还要了解最新的技术趋势和发展方向,如云计算、大数据、人工智能等。

刷题是必不可少的,可以通过解答真题和模拟考试来提高应试能力。此外,参加培训课程和交流讨论也能帮助加深理解和提升技能。

最重要的是保持学习的态度和持续的实践,不断提升自己的系统架构能力。

六、系统架构师的工作职责?

职责一:全局的技术规划

全局技术规划是专职架构师必须要做的工作,全局技术规划要能非常明确的指引整个团队在同一时间向同一个方向前进,这对架构师的心力和体力都是有很大的考验,全局规划不仅要与业务紧密沟通,还必须有对应的技术深度和广度,应采取正确的方法论,勇敢做出判断和决策!

职责二:统一的方法&规范&机制

专职架构师不仅要能够做出全局技术规划,还要能提供统一的方法、规范和机制以保障全局技术规划的顺利有序进行,这是一项相对复杂且繁琐的过程,需进行全方位的拆解,直到权责清晰对等。

职责三:完备的基础构建

基础构建的完备程度对全局技术规划来说是十分重要的,为全局技术规划得以顺利实施提供了强大的武器库,因此,专职架构师要制定完备的基础构建。

职责四:落地的规划才是架构

这是对专职架构师最大的挑战,专职架构师应实时关注全局技术规划实施的进度,把控发展的方向,以确保与规划预期结果保持一致!

七、系统架构师是什么专业?

系统架构师不是一个具体的专业,而是一个职业。系统架构师主要负责设计和开发复杂软件系统的整体结构和架构,协调各个模块的功能,在兼顾项目需求的同时保证系统的可靠性、可维护性、可扩展性等方面的要求。系统架构师需要掌握多种技术和领域的知识,如操作系统、数据库、网络、算法等,并具备较高的架构思维和技术创新能力。在现代信息化社会中,系统架构师职业的重要性逐渐凸显。对于大型软件系统的开发,系统架构设计是其中的核心和基础。因此,系统架构师的需求越来越大,对其专业技能方面的要求也不断提高。

八、系统架构师应该掌握什么?

系统架构师是一个最终确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节、扫清主要难点的技术人员。主要着眼于系统的“技术实现”。因此他/她应该是特定的开发平台、语言、工具的大师,对常见应用场景能马上给出最恰当的解决方案,同时要对所属的开发团队有足够的了解,能够评估自己的团队实现特定的功能需求需要的代价。系统架构师负责设计系统整体架构,从需求到设计的每个细节都要考虑到,把握整个项目,使设计的项目尽量效率高,开发容易,维护方便,升级简单等。系统架构师综合的知识能力包括9个方面,即:

1、战略规划能力。

2、业务流程建模能力。

3、信息数据结构能力。

4、技术架构选择和实现能力。

5、应用系统架构的解决和实现能力。

6、基础IT知识及基础设施、资源调配能力。

7、信息安全技术支持与管理保障能力。

8、IT审计、治理与基本需求分析、获取能力。

9、面向软件系统可靠性与系统生命周期的质量保障服务能力。

九、系统架构师要有什么基础?

系统架构师要全面熟识系统的构成及其关系,并有统筹、沟通协调的执行力。

十、系统架构师通过率?

软考各级别的通过率并不是很高,系统架构设计师属于软考高级,难度也比初级和中级更大,因此通过率也比初中级要低。

软考各级别考试的平均通过率大约是在25%左右,这与软考报名门槛不高等因素也是有一定关系的

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
点击我更换图片