三个模块,搭建后台用户角色权限管理系统
bigegpt 2024-10-15 08:40 7 浏览
一个后台的用户角色权限系统总是可以大概划分为三个打的模块的:用户管理、角色管理、权限管理。本文作者将就此三个模块展开叙述,enjoy~
一. 用户角色权限系统说明
1. RBAC权限设计模型
(1)RBAC
(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联,从而获得某些功能的使用权限。权限被赋予给角色,而不是用户,但是一个用户可以拥有若干个角色,当一个角色被赋予给某一个用户时,此用户就拥有了该角色所包含的功能权限。简单地说,一个用户拥有若干角色,每一个角色拥有若干功能权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。如下图:
2. 三大模块搭建后台用户角色权限系统
如上所述,一个后台的用户角色权限系统总是可以大概划分为三个打的模块的:用户管理、角色管理、权限管理。用户管理往往随着行政部门划分或者随着业务线部门划分,对应部门或者小组内的用户有着基本相似的功能需求和权限等级;角色管理相对来讲更加固定,它往往是基于业务管理需求而预先在系统中设定好的角色标签,一般不会随意更改,更像是一个用户分组标签;权限管理内容相对更加庞杂和丰富,主要包含了目标、操作和许可权三个部分,当某一功能权限授权给用户时,也就相当于为该用户开通了可以操作某个目标功能的许可权。
角色权限系统属于策略设计的范畴,它的设计非常考验一个PM对业务的理解力以及对自己后台所有功能的熟悉程度。做角色权限系统之前一定要先深度了解业务流程以及后台的所有功能模块,在不了解的情况下,多向相关同事请教,避免角色权限系统设计过程中出差错和逻辑漏洞。
二. 用户角色权限系统建设的三大模块
1. 用户管理
用户管理中的用户主要是功能系统的使用者,这些用户是一个一个的员工个体,这些个体往往从两个维度来进行划分:行政关系(部门架构)、业务部门(业务架构)。用户管理就是在此两个维度来给员工个体进行关联性的初步分群或者分组。按照行政部门或者按照业务线部门划分后,对应部门或者小组内的用户有着基本相似的系统功能使用需求和权限等级;
注:上图例为按照行政关系划分的用户管理模式
注:上图例为按照业务线关系划分的用户管理模式
2. 角色管理
(1)角色管理
角色往往是基于业务管理需求而预先在系统中设定好的固定标签,每个角色对应明确的系统权限,其所拥有的系统权限一般不会随意更改,并且角色也不会随着用户的被添加和被移除而进行改变,相较于用户管理而言更加稳定;
(2)自动赋权:用户自动进入角色
如果角色与行政关系下的组织部门存在绑定关系,那么如果一个用户进入到该组织部门后,该用户会自动被加入到对应的角色中,并且拥有该角色所有的系统权限。如一个财务人员【小张】入职财务部后,那么该用户无需进行额外的授权即可在对应财务报表系统查看该部门员工可查看的财务数据报表和对应的操作权限(比如操作财务审批等);
(3)角色赋权:用户被添加进角色
业务是不断创新和发展的,随着业务的发展,会有越来越多的新的角色被设置和创建,比如公司新启动了一个企业团餐项目,项目部横向的从各个部门找了多个员工组建项目团队,并且该项目的业务权限也只是授权给这批员工可查看和操作,那么,在此项目中,会产生一个新的角色 “ 财务1 ”,系统高级管理员会把从财务部门选中的财务【小张】添加到“ 财务1 ”这个角色中,那么【小张】即可获得查看企业团餐项目业务数据报表和操作的权限。这种权限的授予无法通过用户行政关系的自动绑定来实现;
(4)角色继承:角色权限的继承
权限可以是独有的,也可以是继承的。每个角色都有自己的权限集,角色继承其实也就是继承父系角色的权限,一般角色在继承其父系角色的全部权限的基础上增加拥有一些自己的权限。而系统角色继承往往存在于用户分级管理比较明确的团队或者公司;
(5)角色互斥:角色包含的权限互斥
角色互斥的业务背景:当一个业务流程由于风控的原因,需要将其操作给划分成分开的几个步骤时,需要给这几个不同的步骤授权不同的角色,并且这些角色之间需要进行互斥。比如大额财务报销审批流程,财务人员【小张】拥有了审批人权限后,就无法将审核确认的权限再授予小张,以此来规避一个人完成大额报销而带来的财务风险;
(6)临时角色
临时角色往往是针对特殊群体设置的,比如公司有特殊访问团队莅临,需要给这些特殊的客户一些临时身份来体验某些功能操作。那么把这些人添加到部门的组织架构中显然是不合适的,因为这些人只是临时的摆放者,不是企业员工;其次,这些客户需要体验的功能操作往往是横跨多个业务模块和产品线的(比较繁杂),一般公司并没有现成的固定角色符合拥有客户所需的全部操作权限,因此需要给这些客户开设临时角色,并且支持给临时角色最大的权限选择空间;
(7)黑白名单
3. 权限管理
(1)权限管理
权限管理更多是从功能菜单、功能操作、数据参数三个不同颗粒度等级来考量的。具体颗粒度的大小视公司结构和团队规模而定,如果不是业务属性一定要求将权限控制到非常精细的级别,其实就没有必要将权限的颗粒度拆分到具体某一项操作或者某一个按钮,毕竟后台产品的核心是业务管理平台,主要目标是辅助业务的管理和推进。
注:如图为某一后台产品的部分截图,其中可见功能菜单页、功能操作按钮和数据字段。
(2)功能菜单权限
对于后台产品来讲,针对功能菜单来划分用户权限其实是比较粗颗粒度的一种管理方式,这种模式下用户一旦获得授权即可使用该菜单栏下的全部数据查看权限和功能操作权限;
(3)功能操作权限
功能操作层级的权限相对于功能菜单会更为深入,这种情况下,不同角色的用户可以进入同一菜单页后台查看相同的数据字段信息,但是他们可执行的功能操作不同;
(4)数据字段权限
数据字段层面是较细颗粒度的拆分,他会实现不同角色用户在进入同一菜单页后台时,可见的数据字段都有差异。比如销售人员进入某销售业绩管理后台时,可以看到自己的业绩提升数据,但是财务人员看到的是业务工单的费用字段,这些字段共存在一个菜单页中,只是受限于不同的角色权限而已。
三. 案例分析
1. 促销活动权限系统权限对接
以某一促销活动的后台从无权限限制到接入用户角色权限管理系统为例,详情如下:
注:以上为某产品的促销活动管理后台截图
2. 促销活动后台接入权限系统前
在促销活动后台接入权限系统之前,几乎全部的系统权限都处于裸奔的状态,所有人业务线成员都可以查看该后台的运营活动内容和运营结果数据,并且可以执行相对敏感的操作。这种情况显然是存在一定的管理风险的,因此该后台系统需要对接权限管理系统进行系统化管理和风险控制;
3. 促销活动后台接入权限系统时
促销活动在接入权限管理系统过程中,需要拆解该功能模块的权限元素(到一定颗粒度),因此需要根据业务特征来判断需要拆分的颗粒度,是到功能菜单、功能操作还是数据字段的级别,明确拆分颗粒度之后,权限管理系统才可以给不同角色按照颗粒度授予权限;
4. 促销活动后台接入权限系统后
促销活动在接入权限管理系统过程后,当对应角色的用户再次登录这个后台时,首先后台会校验该用户的角色是否拥有该功能模块的权限,以及该角色权限对应的操作权限和数据字段权限,校验结果经服务端处理会在产品端展示给用户可见。这个时候,同一用户再该后台可见和可执行的操作与接入权限管理系统之前可能有很大的不同,这就是基于用户角色的权限管理系统带来的改变。
四. Q&A
1. 一个用户拥有多个角色,多角色之间如果存在互斥关系如何处理?
如果一个用户已经被添加到某一角色范围下,那么,当给该用户添加一个与当前角色存在权限互斥关系的角色时,系统会进行互斥性判断,后面的角色就无法给该用户添加成功;
2. 业务发展过程中,如何保证不同角色之间权限拆分清晰?
随着业务的快速发展,一定会不断新增不同的角色和更多的功能模块,而且这些角色和功能权限之间的关系也会日益混乱,这个时候需要产品经理和业务方一起,及时的面对业务的发展变化,及时、快速的梳理业务调整范围,作出对应的改变;
3. 用户权限管理系统核心难点是前期的产品设计吗?
用户权限管理系统核最难的不是前期的产品设计,而是后续的运营维护,因为权限系统的结构往往不会随意变更,但是随着业务发展快速出现的角色和功能模块,为了防止角色和功能权限之间的关系变得混乱,在建立新的角色和分配权限的时候需要思路清晰且慎重调整。
完结~
本文由 @阳明(刘同) & @云殊(张俊恒)原创发布于人人都是产品经理。未经许可,禁止转载
题图来自 unsplash,基于 CC0 协议
相关推荐
- 当Frida来“敲”门(frida是什么)
-
0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...
- 服务端性能测试实战3-性能测试脚本开发
-
前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...
- Springboot整合Apache Ftpserver拓展功能及业务讲解(三)
-
今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...
- Linux和Windows下:Python Crypto模块安装方式区别
-
一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...
- Python 3 加密简介(python des加密解密)
-
Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...
- 怎样从零开始编译一个魔兽世界开源服务端Windows
-
第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...
- 附1-Conda部署安装及基本使用(conda安装教程)
-
Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...
- 如何配置全世界最小的 MySQL 服务器
-
配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...
- 如何使用Github Action来自动化编译PolarDB-PG数据库
-
随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...
- 面向NDK开发者的Android 7.0变更(ndk android.mk)
-
订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...
- 信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要
-
问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...
- OpenSSH 安全漏洞,修补操作一手掌握
-
1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...
- Linux:lsof命令详解(linux lsof命令详解)
-
介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...
- 幻隐说固态第一期:固态硬盘接口类别
-
前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...
- 新品轰炸 影驰SSD多款产品登Computex
-
分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...
- 一周热门
- 最近发表
-
- 当Frida来“敲”门(frida是什么)
- 服务端性能测试实战3-性能测试脚本开发
- Springboot整合Apache Ftpserver拓展功能及业务讲解(三)
- Linux和Windows下:Python Crypto模块安装方式区别
- Python 3 加密简介(python des加密解密)
- 怎样从零开始编译一个魔兽世界开源服务端Windows
- 附1-Conda部署安装及基本使用(conda安装教程)
- 如何配置全世界最小的 MySQL 服务器
- 如何使用Github Action来自动化编译PolarDB-PG数据库
- 面向NDK开发者的Android 7.0变更(ndk android.mk)
- 标签列表
-
- mybatiscollection (79)
- mqtt服务器 (88)
- keyerror (78)
- c#map (65)
- resize函数 (64)
- xftp6 (83)
- bt搜索 (75)
- c#var (76)
- mybatis大于等于 (64)
- xcode-select (66)
- mysql授权 (74)
- 下载测试 (70)
- linuxlink (65)
- pythonwget (67)
- androidinclude (65)
- libcrypto.so (74)
- logstashinput (65)
- hadoop端口 (65)
- vue阻止冒泡 (67)
- jquery跨域 (68)
- php写入文件 (73)
- kafkatools (66)
- mysql导出数据库 (66)
- jquery鼠标移入移出 (71)
- 取小数点后两位的函数 (73)