权限设计是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