深入剖析B端产品权限设计-功能权限设计篇

news2024/11/30 0:47:27

权限设计是B端产品永远绕不开的一个课题,良好的产品权限设计架构是支撑企业复杂业务的基础与关键。接下来会分两篇文章剖析产品权限管理,一篇分享功能权限管理,一篇分享数据权限管理。

一、什么是权限管理

权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。

简而言之,用户登录系统后,管理用户可以使用那些功能、查看哪些数据,即为权限管理。

权限管理分为两大类:功能权限管理、数据权限管理。

1、功能权限管理:定义登录用户可以看到哪些界面、使用哪些功能。

如:CRM系统可以覆盖售前(线索、拜访、工作汇报等)、售中(合同、订单等)、售后(服务工单、维保等)等多个业务板块的内容,那么不同角色的人员登录系统后,可区分使用不同的功能。负责市场的用户登录系统后使用线索、拜访、工作汇报等功能,负责售后的用户登录后使用服务工单、维保计划等功能。

2、数据权限管理:定义登录用户可以查看哪些数据。

对于同一功能,不同角色的用户可以查看的数据范围是不一样的,如:CRM中的客户数据,对于企业CEO而言,所有的客户CEO都可以查看到;对于区域销售经理而言,仅可以查看到归属于所管辖区域内的客户(华东区域销售经理只查看华东的客户,华南区域销售经理只查看华南的客户);对于普通销售员而言,仅可以查看到自己负责的客户。

二、权限管理模型

1. RBAC模型(Role-Based Access Control)

基于角色的访问控制,是当前大多数权限管理设计的“底座”。

RBAC模型三个关键元素:用户、角色、权限。

用户:登录系统的使用人员,如:张三、李四等。
角色:定义可使用的权限资源的集合,包括:页面、功能、数据等权限资源,如销售业务员角色、财务角色等。
权限:系统的所有权限资源,包括:功能、页面、操作、流程、数据等

RBAC模型,使用角色关联管理用户及权限。解耦用户和权限的对应关系,通过中间对象 – 角色进行关联管理。从而简化系统权限的授权,提升权限管理的可拓展性和可维护性。

举个例子:

企业的销售业务员在CRM系统中需要使用客户管理、拜访管理、订单管理等模块的功能。

在传统模式下,我们需要给销售员A授权这部分的权限,当新增加一个销售员B时,又需要重新授权一遍这部分的权限,增加N个销售员就需要重复授权N遍。

在RBAC模式下,将销售员需要的权限都同一授权给“销售业务员”这个角色,增加销售员时,只需要将“销售业务员”的角色给到销售员即可。同时,销售员如果需要新增或减少功能,只需要修改角色授权的资源即可,无需一个一个销售员进行调整。

2. 基于RBAC模型的“变形”

基于RBAC模型的变形,将功能权限和数据权限区分管理,进一步提升权限管理的灵活性。目前,在paas平台、saas+paas的产品中使用较多。

通过职能进行功能权限管理,通过角色进行数据权限管理。职能管理是“权”,角色管理是“限”,一个用户的权限=职能管理+角色管理。

将功能权限与数据权限分开管理,对两种权限分别做一些复杂的组合权限控制时,可以不用考虑互相影响。如:通过角色权限+角色组+共享规则+特例规则等,组成数据权限满足复杂的权限要求

三、功能权限管理

功能权限管理:定义登录用户可以查看到哪些界面、使用哪些功能等。

1. 功能权限资源分类

常见的功能权限管理可以定义到模块、页面、按钮、字段、流程、业务类型等层级。

模块权限:指业务功能板块的访问权限,如:客户管理、线索管理。一般情况下,分配模块权限,功能模块下的页面、按钮均同步授予权限,如:分配客户管理权限,客户列表、客户详情、新增客户按钮、删除客户按钮等同步授予权限。

页面权限:指特定的功能页面的访问权限,如:客户列表、客户详情。一般情况下,分配页面权限,页面下的按钮均同步授予权限,如:分配客户列表权限,新增客户、删除客户等按钮同步授予权限。

按钮权限:指特定功能按钮的操作权限,如:新增、删除、修改、提交等按钮。

字段权限:指功能模块的字段操作权限,字段权限控制多出现在paas平台,如:客户的客户名称字段的读写、导出权限。

流程权限:流程权限控制多出现在paas平台,在paas平台上支持用户自定义流程并支持设定流程使用权限,包括业务流程、审批流程。流程权限较少单独作为一项权限资源进行管理,通常流程权限和按钮权限是一致的,大多数流程都是通过按钮去触发流程执行,控制按钮权限也等于控制了流程权限。

业务类型权限:较少使用的权限资源控制,多出现在paas平台上。paas平台支持用户定义对象的不同业务类型,且支持不同角色可使用不同的业务对象。如:客户对象可定义直销客户、渠道客户两种业务类型,那么负责直销的销售使用直销客户,负责渠道的销售使用渠道客户,两种不同的业务类型的客户,字段模型、流程等都可能不同。

2. 功能权限管理基本原则

① 功能权限分配遵循功能优先级,分配优先级较低的权限资源时,必须先分配其归属的优先级高的权限资源。

对于常用权限资源,可以分成三个优先级,且权限资源是个层级结构,有归属关系。权限资源进行分配时,分配低优先级的权限资源时,必须分配其归属的高优先级的权限资源。

如:分配“新增客户”的按钮权限给到用户,那么需要把“新增客户”按钮所在的【客户列表】页面分配给当前用户,同时为了分配【客户列表】页需要把{客户管理}模块分配给到用户。否则,只分配新增客户按钮的权限,那按钮所在的页面用户无法查看,这个按钮也就无法操作。

所以,大多数产品的功能权限管理,在对角色授予权限时,勾选低优先级的权限资源时,会默认自动将其归属的父级权限资源默认勾选上。如:勾选按钮时,会默认将按钮所在的页面,页面所在的模块对应勾选上。

注:图中将流程归为第一优先级是因为,定义业务流程时,可能跨功能模块、可能涉及多个页面跳转等。如:销售线索转商机的流程,当销售线索满足一定的条件时,可以点击按钮触发流程,自动生成一条商机记录。那么这个流程就涉及了两个功能模块:线索模块、商机模块。

② 登录用户拥有多个角色时,可访问多个角色关联的权限资源的总和。

举例说明:用户A 拥有 角色1、角色2 两个角色,角色1 可访问页面I、按钮I、流程I,角色2可访问页面I、流程I、页面II,那么用户A即可访问页面I、按钮I、流程I、页面II。

③ 可支持管理的权限资源类型越多,整体的维护及开发成本越高。

功能权限管理并非支持管理的权限资源类型越多越好,这与系统整体的开发与维护成本息息相关。可管理的权限资源类型越多,成本越高。需要根据实际的管理需要去确定功能权限管理需要支持的权限资源类型。

目前大多数的产品功能权限管理支持到“模块-页面-按钮”层级,或者是“页面-按钮”层级。较为常用的系统设计中,模块、页面、按钮这三种类型的权限资源只需要在系统后台完成资源注册,即可对这部分权限资源进行管理。如下方截图:

以字段的访问、操作权限为例,当我们希望将权限管理拓展到字段层级时:

首先需要明确对象字段中的文名称与数据库对象表的列名的对应关系,用户定义对象字段的读写、导出等权限时,需要根据字段的中文名称去做选择,如果只展示数据库表名,对于用户而言,是无法理解和操作的。

其次在用户访问对象数据、编辑对象数据等操作时需要对用户权限进行查验,验证用户是否有权限访问、操作字段。

相对于常用的“模块-页面-按钮”/“页面-按钮”的权限控制,只需要控制页面、按钮的显示/隐藏,整体的维护和开发成本是高出一大截的。

四、功能权限管理的梳理模板

在产品实施交付的过程中,需要对用户的功能使用权限进行梳理,对于不同职能的用户授权不同的功能。

下面分享一份功能权限管理的梳理模板:

注:文档模板中并未将字段操作权限的梳理呈现出来,原因是:各功能对象的字段较多,实际情况下,并不会和业务人员逐个字段核对是否需要查看、导出等权限。更多的是,一些特例情况会在调研、沟通的过程中会提出,可在表中通过备注记录。

最后

相较于功能权限管理而言,数据权限管理更复杂、也更难理解。实际业务中,会有各种业务场景需要满足,因此,灵活的数据权限管理架构是至关重要的。下一篇将结合实际场景分享数据权限管理。

原文出自:https://www.toutiao.com/article/7186629265029661243/?log_from=20885263c1f21_1673333143009

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152514.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.9第三周星期一

LAMP环境搭建 1. 下载 yum install gcc gcc-c cmake ncurses ncurses-devel bison wget openssl-devel -y rpm -qa | grep mysql rpm -qa| grep mariadb yum install gcc gcc-c cmake ncurses ncurses-devel bison wget openssl-devel -y 2.建立mysql 组&#xff0c;<--新…

Linux常用命令与常见操作:重启服务器

Linux系统运维经验 Xshell prompt与Linux 【Linux】【CentOS】xshell连接Linux虚拟机 Linux linux常用命令 常见操作 升级补丁后重启服务器 cd /opt/zc/ nohup ./startup-linux.sh &有36、37两台服务器&#xff0c;37直接执行上面2条语句即可重启成功。 36这台服务器…

【计算机网络】网络基础

目录前言一、计算机网络发展二、初识“协议”1. 协议的概念2. 协议分层三、OSI七层模型四、TCP/IP五层(四层)模型五、网络传输基本流程1. 网络传输流程图2.数据包封装和分用六、网络中的地址管理1. IP地址2. MAC地址前言 本文是博主首次学习网络知识后进行的总结&#xff0c;文…

毫米波雷达「战火」升级

车载毫米波雷达市场的「战火」&#xff0c;也在快速蔓延到行业上游。 比如&#xff0c;雷达SoC&#xff08;新一代RF CMOS&#xff09;集成化趋势。这意味着&#xff0c;毫米波雷达芯片方案商一次性集成射频前端、雷达信号处理基带和微处理器以及其他元器件&#xff08;包括电源…

文件IO操作开发笔记(二):使用Cpp的ofstream对磁盘文件存储进行性能测试以及测试工具

文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/128626548 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

Docker | 深度学习中的docker看这一篇就够啦

目录 1.了解Docker 1.1.为什么要用docker? 1.2.可以用docker做什么? 1.3.docker 框架 2.Docker 的基本使用 3.实例 :VS code远程连接服务器上的docker环境 3-1:环境框架可视化及ssh连接&#xff0c;搭建pytorch深度学习环境 3-2:搭建一个新的容器pytorch深度学习环境…

北大硕士LeetCode算法专题课-数组相关问题

算法专题&#xff1a; 北大硕士LeetCode算法专题课---算法复杂度介绍_骨灰级收藏家的博客-CSDN博客 北大硕士LeetCode算法专题课-基础算法之排序_骨灰级收藏家的博客-CSDN博客 北大硕士LeetCode算法专题课-基础算法查找_骨灰级收藏家的博客-CSDN博客 数组相关问题 双指针 …

20-FreeRTOS队列API函数

1- xQueueCreate queue. hQueueHandle_t xQueueCreate( UBaseType_t uxQueueLength,UBaseType_t uxItemSize );创建一个新队列并返回 可引用此队列的句柄。 configSUPPORT_DYNAMIC_ALLOCATION 必须在 FreeRTOSConfig.h 中被设置为 1&#xff0c;或保留未定义状态&#xff08;此…

ShardingSphere分库分表schema名称导致NPE问题排查记录

前段时间把 ShardingSphere 升级到了 5.1.1 版本&#xff0c;奈何官方版本升级太快跟不上速度&#xff0c;这不最近又发现了一个 BUG。 问题现象 数据库做了分库分表&#xff0c;在需要查询多表数据进行 merge 的时候发生了一个 NPE 的异常。 Caused by: java.lang.NullPoin…

【数据结构】前缀树/字典树

目录1.概述2.代码实现3.应用本文参考&#xff1a; LeetCode 208.实现 Trie (前缀树) 1.概述 前缀树又称字典树、Trie 树、单词查找树&#xff0c;是一棵有根树&#xff0c;同时也是一种哈希树的变种&#xff0c;其每个节点包含以下字段&#xff1a; 指向子节点的指针数组 chi…

pytorch 分布式调试debug torch.distributed.launch

文章目录一. pytorch 分布式调试debug torch.distributed.launch 三种方式1. 方式1&#xff1a;ipdb调试&#xff08;建议&#xff09;命令行使用pdb未解决&#xff1a;2. 方式2&#xff1a;使用pycharm进行分布式调试&#xff08;侵入式代码&#xff09;3. 方式3&#xff1a;使…

HRNet源码阅读笔记(5),庞大的PoseHighResolutionNet模块-transition1

在stage1的最后&#xff0c;分支了。就是所谓的transition1&#xff0c;详见下面的第13行。def forward(self, x):x self.conv1(x)x self.bn1(x)x self.relu(x)x self.conv2(x)x self.bn2(x)x self.relu(x)x self.layer1(x)x_list []for i in range(self.stage2_cfg[NU…

【前端之旅】Webpack模块打包工具

一名软件工程专业学生的前端之旅,记录自己对三件套(HTML、CSS、JavaScript)、Jquery、Ajax、Axios、Bootstrap、Node.js、Vue、小程序开发(Uniapp)以及各种UI组件库、前端框架的学习。 【前端之旅】Web基础与开发工具 【前端之旅】手把手教你安装VS Code并附上超实用插件…

【图的存储】

更好的阅读体验\color{red}{更好的阅读体验}更好的阅读体验 文章目录1. 邻接矩阵2. 边集数组3. 邻接表4. 链式邻接表5. 链式前向星总结1. 邻接矩阵 思想&#xff1a; 利用二维数组 g[N][N] 存储所有的点到点的权值。其中 N 为点的数量&#xff0c;g[i][j] 表示点 i 到点 j 的权…

【C++】容器适配器

文章目录一. 什么是适配器?什么是容器适配器?二.理解容器适配器stack的模拟实现queue的模拟实现一. 什么是适配器?什么是容器适配器? 适配器是一种设计模式&#xff08;设计模式是一套被反复使用的&#xff0c;多数人知晓的&#xff0c;经过分类编目的&#xff0c;代码设计…

CAD未协调的新图层怎么处理?

在打开CAD图纸时&#xff0c;系统提示图形存在为协调的新图层是什么意思&#xff1f;所谓未协调图层&#xff0c;是指上次打印或者保存之类命令后新增的图层&#xff0c;大部分情况下增加新的外部参照时会把所有外部参照中的图层标记为未协调图层。CAD未协调的新图层怎么处理&a…

2023年底,我要通过这5点,实现博客访问量500W

说实话&#xff0c;这真的是一个非常高远的flag&#xff0c;因为我目前只有35W&#xff0c;但根据我2个月前还是12W的访问量&#xff0c;我觉得我还是可以拼一把的&#xff0c;在这里我想向大家分享一下我的计划&#xff0c;如何达成2023年底&#xff0c;博客访问量达到500W的K…

期刊会议排名、信息检索网站推荐、IEEE Latex模板下载(更新中...)

一.拿到一个期刊或论文&#xff0c;不知道他的影响因子、分区类型等等信息&#xff0c;可以使用以下几个网站搜索一下。二.一些会议期刊搜索1.国外The Latest Information Technology Conference and Journal List - Conference Partner&#xff08;信息技术最新国际会议和期刊…

Java程序员必知四种负载均衡算法

前言 一般来说&#xff0c;我们在设计系统的时候&#xff0c;为了系统的高扩展性&#xff0c;会尽可能的创建无状态的系统&#xff0c;这样我们就可以采用集群的方式部署&#xff0c;最终很方便的根据需要动态增减服务器数量。但是&#xff0c;要使系统具有更好的可扩展性&…

直观理解--马氏距离

首先我们很了解欧氏距离了&#xff0c;就是用来计算欧式空间&#xff08;就是我们常见的坐标系&#xff09;中两个点的距离的。 比如点 x(x1,…,xn)x (x_1,…,x_n)x(x1​,…,xn​) 和 y(y1,…,yn)y (y_1,…,y_n)y(y1​,…,yn​) 的欧氏距离为&#xff1a; d(x,y)(x1−y1)2(x2…