AD
宝山新闻>科技>最好的权限设计,是先区分功能权限和数据权限

最好的权限设计,是先区分功能权限和数据权限

2019-11-04 08:02:57 作者:匿名 阅读量:3674
摘要: 本文为我们介绍了功能权限和数据权限的不同点、以及不同部分中的要点与注意事项。我们一般说的时候是在说功能权限和数据权限。以下分别描述一下我对功能权限和数据权限的理解。图1-1说到功能权限不得不说rbac

本文介绍了函数权限和数据权限的区别,以及不同部分的要点和注意事项。

2b系统总是不可避免地面临权威问题。这不是核心业务,但却是至关重要的。这总是一触即发的事情。此外,不同客户的组织结构完全不同,功能重用性很低。有什么方法可以快速解决权威问题吗?

当我们谈到[权限时,我们指的是功能权限和数据权限。功能权限是指用户登录系统后可以看到哪些模块和页面,而数据权限是指用户可以看到哪些数据以及模块中的几段数据。下面分别描述了我对函数权限和数据权限的理解。

在企业系统中,不同业务负责人的需求可以通过配置用户的功能权限来解决,但是如何实现快速配置呢?功能模块级、页面级还是更细粒度的粒度?如果我没有权限跨模块操作,我该怎么办?

图1-1

谈到功能权限,我们不得不说rbac(基于角色的访问控制)模型。它的中文是基于角色的访问控制(role-based access control),主要是将功能组合成角色,并将角色分配给用户,即角色是功能的集合。Rbac有许多成员,但是基本的rbac0对于我们所参与的系统来说已经足够了。(有关更多信息,请单击rbac权限管理摘要)

为什么要引入这个模型?请看下面的例子:

企业A共有12个功能,需要创建100个用户。这些用户中有负责财务、人事、销售等的人。如果没有引入rbac模型,我们需要在每个用户创建后分配函数,至少100次(每个用户只有一个函数)。如果人数增加到1000人甚至10000人,并且用户可能有多种功能,操作将非常复杂,如图所示:

图1-2

经过多次操作,发现分配给某些人的功能是相同的。例如,分配给10个用户(如A和B)的功能是客户管理、订单管理和供应商管理模块。这些功能模块能集成到一个包中并分发给需要它们的用户吗?

这个包叫做角色。由于角色和功能之间的对应关系相对固定,因此在向用户分配权限时只能分配角色。

图1-3

因此,引入rbac模型的意义在于:

在图1-4中,一个用户对应于一个角色,但是在实际场景中,一个用户也可以对应于多个角色。

一些更复杂的系统可能涉及rbac家族的其他成员:rbac1、rbac3、rbac97等。,并逐渐看到“用户组”、“角色继承”和“受限角色”等概念。然而,模型的引入只有更多的基础和条件,并且复杂性不会因为模型的增加而迅速降低。模型的引入带来的边际效用只会越来越低。

有关更多角色问题,请参考:角色权限设计的100个解决方案。

功能越多,操作越复杂,复杂度越高,因此选择合适的功能粒度可以快速解决权限问题,也有助于用户提高工作效率。

从粗到细,功能的粒度一般分为模块级->页面级->接口级(接口级功能权限指哪些角色可以调用哪些接口)。

从背景角度来看:为了系统安全,代码肯定会在端口级别实现。我们粒度选择的意义是什么?当然,这是为了降低成本和提高用户效率。粒度越粗,用户操作越简单,灵活性越低。

非技术网站模块化就足够了,否则用户体验会让人想哭。比较以下两幅图片来感受它:

图1-5

如果必须将权限细化到页面级甚至界面级,则应遵循优先级规则,即只要分配了低优先级的功能,就必须首先分配高优先级的功能,否则会出现操作位置无法找到的尴尬情况,尽管有删除权限(删除按钮在列表页面上,但没有分配查看列表页面的权限)。具体措施可以通过交互方式解决,例如在检测低优先级功能时自动帮助检查高优先级功能,或者通过提示性词语帮助用户检查组合。

应该注意的是,不同的交互设计将导致不同的优先级,因为一些按钮将被放置在列表上,而一些按钮将仅被放置在细节页面上。我们通常使用的优先级顺序是查看详细信息>查看列表>添加、删除、编辑和其他操作按钮。

有一个具有模块级功能权限的系统,其中模块A的页面有一个链接可以访问模块B的页面,具有模块A权限的用户可以点击该链接进入模块B吗?

这个问题有两种解决方案:

1.允许只有模块甲权限的人通过链接访问模块乙

这说明系统有一个隐含的规则:看到链接意味着用户拥有模块a和模块b的某些页面的功能权限,后台需要给所有拥有模块的用户一个自动分配访问模块b的页面的权限。

2.只有同时拥有模块甲和模块乙权限的用户才能通过该链接进行访问

这表明此链接是为对两个模块都有权限的用户设计的。也就是说,只有模块A权限的用户不能通过链接访问模块B。

需要根据实际业务为用户选择一种方法,但是无论哪种方法都可以通过交互和预定义的方法使操作更容易。例如,如果选择了第一种方法,则具有模块A权限的角色和模块B的某个页面将被初始化,以便用户可以随时选择。

如果所有信息都是公开透明的,就没有必要控制数据权限。然而,现实世界如此复杂,每个人都需要看到并且应该永远看到不同的数据。因此,数据权威来自于这些需求和规则。

数据权限解决了用户可以看到多少数据和哪些数据的问题。例如,用户甲和用户乙都可以看到销售模块,但甲可以看到320条数据,乙只能看到100条数据,而甲可以看到的320条数据包含乙可以看到的100条数据,所有这些都是由数据权限决定的。

数据权限通常与企业的组织结构相关,企业的组织结构分为树状结构和扁平结构(还有更复杂的组织结构,这里暂时不做描述)

图2-1树形组织结构,每个部门都是一个节点

图2-2平面组织结构

由于扁平化的组织结构相对简单,需要注意的问题已经隐藏在树形结构中,所以下面重点介绍树形结构。

不同的企业层次有不同的深度。如果系统支持无限级别,优势是普遍的,缺点是它带来了数据的复杂性和可视化实现的复杂性。因此,需要详细分析具体问题。

图2-3

由于用户拥有的权限是由功能权限和数据权限之间的交叉定义的,因此这里假设部门g、a和b的用户已经被赋予用户管理和资产管理的功能权限。

目前,节点之间有几种类型的数据共享方法:

为实际业务系统定义数据权限时:

A.选择一个或多个上述规则;

b .根据业务定义上述“管理”:各种小功能的添加、删除、修改、检查和组合。

例如,如果选择父节点只能查看而不能编辑、删除或添加子节点的所有数据,则图中的用户g只能查看部门a的所有数据,不能编辑、删除或添加。

图2-4与图2-3相同

如果用户a1在实际服务中优于用户a2,并且要求用户a1能够查看用户a2的数据,而用户a2不能查看用户a1的数据,该怎么办?

如果仅在节点级别(组织级别)指定数据权限,用户a1和用户a2看到的数据是相同的。所有需要重新引入功能权限的[角色]可以解决上下级人员的问题。

例如,如图2-4所示,系统选择的节点间数据共享方式是:节点只能添加、删除和修改自己节点的数据。此外,还引入了角色规则:管理员可以添加、删除和修改自己节点的所有数据,而非管理员只能删除和修改自己创建的数据。如果用户a1是管理员,a2是非管理员,a1可以添加、删除和修改部门a的所有资产。a2只能查看、编辑和删除自己创建的资产。

扁平的组织结构相对简单,只有树结构中的第三个问题。请参考树形结构的问题3。

假设一个系统有两个模块:模型管理和设备管理。操作系统的过程是在创建设备之前创建模型。如果用户只有设备管理,但无权管理模型,那么他在创建设备时可以选择模型吗?

图2-5

这实际上是一个合并功能权限(接口级别)和数据权限的问题,也就是说,用户在创建设备时是否有权请求模型列表接口?您想在列表中显示哪些数据?

就功能权限而言:用户必须有权请求界面列表,否则该过程将无法进行。

在数据权限方面,有几个可供参考的规则,这些规则是根据实际业务具体选择的:

总之,在角色权威的海洋中航行总是会给我们一些原则和理论,这样我们就能走得更快并有成就感。

这篇文章最初是由@ nana发表的。每个人都是产品经理。未经允许禁止重印。

主题地图来自unsplash,基于cc0协议。

福彩快三