了解这几点,权限管理其实很简单
本文作者从工作实践出发,结合案例等分享了关于权限设计相关的知识,供大家一同参考和学习。
最近一段时间,我们的系统在做一个新功能,其中涉及到一些与权限相关的功能,之前也接触过权限相关的设计,这篇文章就来对关于权限设计的进行一次总结。对于各种产品,不管是C端产品或者是B端产品,每个产品当中都有着权限控制,权限管理是系统中的基础模块,在搭建系统的时候,系统架构式就需要将权限搭建完成。好的权限管理,对于后续的系统扩展可以提供极大的兼容性。
一、常见的权限分类
1. 登录权限
在我们日常使用APP的时候,有时候也会遇到一些权限控制,比如在阿里零售通APP(下图1)的首页,在未登录的情况下,用户只能看到部分商品的价格,只有当我们登录之后才能看到商品的价格。这种权限控制也比较简单,需要前端开发根据用户当前的登录状态做判断即可,但是这个是针对每个商品的价格,单独配置了是否对未登录用户开放的权限。
2. 认证权限
而有的产品的权限校验会更严格一点,例如京东掌柜宝APP(下图)的首页,即使登录以后也是看不到商品价格的,必须在认证成为店铺的掌柜才能看到商品价格。而且这个产品里面,是所有的价格都看不到,这种是做了一种全局的配置,无论是哪件商品,只要用户未认证,都是看不到商品价格的。
3. 会员权限
另外还有一些权限,是我必须成为会员才能进行操作的。例如下图中的QQ音乐会员,当我们是非会员的时候,只能试听其中的片段,页面也会直接提示我们需要开通权限才能播放完整的歌曲。同样还有一些其他的工具类APP也会使用相同的套路,可以先让用户免费试用一段时间,如果想要继续使用的话,就需要付费。有的是基础功能免费,使用全部功能的话,需要付费。这些都是一样的逻辑,前端都需要校验当前登录的用户是否有会员权限。
4. 菜单权限
我们上面说的这些都是一些我们在自己手机APP,即用户端的一些权限校验逻辑,而在我们的管理后管也会经常有其他一些权限,其中最常见的就是菜单权限。顾名思义,在后台管理的页面,我们经常会有一些菜单,每个菜单上面都有对应的权限,只有满足权限的人才能进行访问。例如下图当中,左边菜单会有不同的菜单,但是不同的人员会赋予不同的权限,所以对于不同的人来说,能够看到的菜单也不一样。
另外在一些移动端的APP上面 ,也会有不同的身份,例如boss直聘上面,可以切换身份,作为求职者和招聘者,不同的身份看到的页面也是不一样的。
5. 操作权限
操作权限是指用户进行某个操作的权限。比如在我们的商品管理里面,商品上架、下架功能的操作需要有专门的人去操作,而查看商品详情的权限则可以放开给更多的人,所以查看商品详情和操作商品上下架的权限就会区分开。
6. 数据权限
数据权限,会控制用户访问页面的时候,能有查看到的数据。这种一般会在公司团队较大的时候会需要有这样的需求区分,如果公司团队人数很少,一般不会有这种需求。当公司人员多的时候,一般会有很多业务部门,每个业务部门会负责不同的业务,根据管理需要,这些业务部门之间的数据有时候会进行需求。
例如我们最近在做的库存分仓库管理,在库存管理的页面,每个仓库的库管员只能看到自己管理的仓库的库存数据,而无法看到其他仓库的库存数据。这是对于业务部门,但是一个公司里面还会有一些管理部门,这些部门的人员是能够看到所有业务部门的数据的,所以又会需要有一个权限需要能够看到所有部门的业务数据。除了这种的数据权限以外,还有字段的数据权限。
比如在订单列表,有些人没有权限查看订单的收件人信息的字段,包括收件人姓名、电话、地址信息,有些人没有权限查看订单的商品价格信息。这种数据权限的划分,需要根据公司的管理要求具体来看待,当如果公司需要管理到这么细的颗粒度的时候,再去做,一般的中小企业,正常情况下很少会有这种需求。
二、如何实现权限管理
上面大概介绍了在APP和管理后台常见的一些权限,这些权限基本上能够满足我们对于用户权限的控制。但是如何实现这种权限设计,这篇文章主要介绍上面第4、5、6种后台权限是如何设计的。在我们一般的后台权限设计当中,一般会用到这几个概念:用户、账号、角色、权限
在我们的系统当中,用户都会分配一个账号,这个账号不会与权限直接相关联,而是中间有一个角色在牵线搭桥。账号、角色和权限都是系统中最底层的概念,也是其他业务逻辑和功能逻辑的基础,在系统的权限管理里面这三者必不可少,下面我们来说说这三者是如何实现权限管理的逻辑的:
1. 权限
根据业务需要,我们会向开发人员提出我们的需求,哪些地方需要做权限控制,技术人员会根据我们的需求创建一系列的权限标识,并对某些页面、按钮、数据等等加上对应的权限校验,这样管理人员就有权限可用了。
2. 角色
系统的管理人员,一般是超级管理员,他们会根据实际的需要,在系统中创建一个角色,这个角色只是一个概念,然后在这个角色上面加上上面开发人员创建的权限标识。这样,这个角色就拥有了这个权限。而往往权限和角色之间是多对多的关系:
3. 账号
最后,我们再将创建好的角色,赋予对应的账号,这样这个账号就拥有了这个角色所拥有的权限了,如下图所示。最终用户在登录他的账号的时候,就拥有了这个账号下面的权限了
这样做的方式是可以灵活配置账号的权限,当当我们新增一个权限,只要我们将这个权限赋予需要这个权限的角色,那么赋予了这个角色的所有账号都可以拥有这个权限了,无需针对每个账号单独开通权限。
扩展当一个组织逐渐扩大以后,权限、角色、用户不断增多,很多时候,利用上面这个逻辑依然能够满足我们的需求,但是对于我们的配置仍然有点麻烦,所以又可以引入组织架构和权限组的概念。
当组织当中不断加入新员工的时候,我们将他的新的账号放到组织架构之下,又将角色按照一定的规则组合后,再关联到组织架构,当用户的账号在这个组织机构之下,有拥有了这个角色组的里面的所有权限,这样,对于新员工,只需要将他放入对应的组织架构即可,而不需要再给他一一配置角色。
以上就是关于权限管理的总结,感谢您的阅读~
作者:三点半先生;微信公众号:晓言产品(ID:Xiao_PM)一名产品小学生,在这里记录每天工作的工作和学习中关于产品的一些想法。
本文由 @三点半先生 原创发布于人人都是产品经理,未经作者许可,禁止转载。
题图来自Unsplash,基于CC0协议。
功能的控制只是权限中的 菜单控制,还需要附带用户的角色身份下的数据控制,这才是权限控制核心,我希望能看到一篇这个