独立产品权限体系设计

广告位招租
扫码页面底部二维码联系

在《原创内容,盗版必究。同一公司下多产品的用户权限管理系统设计未经授权,禁止复制转载。》一文里,我设计了一种多产品的权限体系,著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。这种体系是给某一个公司有多个产品线,不同【未经授权禁止转载】【原创内容,转载请注明出处】产品线的用户及其权限都放在这一个体系里面未经授权,禁止复制转载。【未经授权禁止转载】统一管理都情况。但是,在大多数情况下,一【转载请注明来源】【版权所有】唐霜 www.tangshuang.net个产品需要自己都权限体系,并不需要和其他【作者:唐霜】著作权归作者所有,禁止商业用途转载。产品公用一个权限体系,因为这些权限几乎是【原创内容,转载请注明出处】【转载请注明来源】该产品私有的,只有当某些权限在不同产品间本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】同时生效时,上文的体系才有价值。

【本文受版权保护】【转载请注明来源】转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net

而这篇文章,主要探讨的是,在单独一个产品【原创内容,转载请注明出处】【原创不易,请尊重版权】里面,如果构建一个权限体系。本文的目的是转载请注明出处:www.tangshuang.net原创内容,盗版必究。将复杂的权限判断逻辑进行抽象提炼,把穿插【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net在复杂业务逻辑里面的权限问题抽象为单一的【原创内容,转载请注明出处】【未经授权禁止转载】联系概念,然后再将这一概念套用到纷繁复杂原创内容,盗版必究。【未经授权禁止转载】的任何独立产品系统中去。而且,在本文中还【原创内容,转载请注明出处】【未经授权禁止转载】解决了上一篇文章的一些遗留问题,我感觉应著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】该算是比较完整的一个思考。

【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。【作者:唐霜】未经授权,禁止复制转载。

三大管理体系【作者:唐霜】

【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】未经授权,禁止复制转载。

在一个产品系统里面,对于权限问题而言,主【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】要是三块:用户、权限(角色)、业务。其中【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】用户是肯定的,角色是相对于用户而言的概念【本文受版权保护】本文作者:唐霜,转载请注明出处。,权限是相对于业务逻辑的概念,但是其实是本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。同一个问题下的不同层面的概念。虽然我们在【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】讨论权限体系,但是实际上是不可能离开用户著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。和业务这两个管理体系,并且,权限寓于其中【转载请注明来源】转载请注明出处:www.tangshuang.net

【版权所有,侵权必究】原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。【本文受版权保护】

另一个话题是“管理”,什么叫管理呢?就是【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】为管理者提供一个可以进行操作的界面,对不【作者:唐霜】【本文首发于唐霜的博客】同的体系提供进行配置的能力。简单说,就在【版权所有】唐霜 www.tangshuang.net【本文受版权保护】产品的后台管理系统中,有三个大的模块,分【本文受版权保护】【版权所有,侵权必究】别是:用户管理模块、权限管理模块、业务接本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。口(权限)管理模块。业务接口权限管理模块转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】的界面上,你可以对某些特定接口进行权限分【本文受版权保护】【版权所有】唐霜 www.tangshuang.net配,规定某个接口只有拥有某些权限才能正常著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】访问。

【原创内容,转载请注明出处】【本文首发于唐霜的博客】【原创不易,请尊重版权】

用户管理体系著作权归作者所有,禁止商业用途转载。

原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。

提供完整的用户注册流,创建、更新、组分配【原创不易,请尊重版权】【原创不易,请尊重版权】等功能。这个模块需要提供三级(或者说三个【作者:唐霜】转载请注明出处:www.tangshuang.net界面)管理,即“机构-组-用户”三级。需未经授权,禁止复制转载。【原创不易,请尊重版权】要先创建机构、组、用户,在创建时,可以对【本文受版权保护】本文作者:唐霜,转载请注明出处。他们的所属进行分配,比如创建用户的时候,转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】可以直接分配给该用户一些组和某个机构。也原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。可以在创建完成之后,再重新分配。

未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】【本文首发于唐霜的博客】【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】

权限管理体系原创内容,盗版必究。

本文作者:唐霜,转载请注明出处。原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】

提供完整的权限创建、更新、分配等功能。这【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net个模块也是提供三级管理。管理者创建某些权原创内容,盗版必究。【版权所有,侵权必究】限,并给定一些标识,这样相当于用标识代替本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】了权限的全部涵义。而且,权限本身是抽象的著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。,因此,一定要有一个完整解释该权限应该是未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】什么意思的字段。

著作权归作者所有,禁止商业用途转载。转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net

业务接口权限分配模块转载请注明出处:www.tangshuang.net

【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】

这个模块可以不单独设立,而是在业务接口管著作权归作者所有,禁止商业用途转载。【原创不易,请尊重版权】理模块的下面设立一个子模块。提供对该接口本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。进行权限分配的功能。和普通的分配不同,对【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net某一个接口分配权限,必须考虑“与”与“或原创内容,盗版必究。【本文首发于唐霜的博客】”的关系,一个接口对多个权限进行要求时,【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net有的时候要求同时拥有这些权限(对于递进式【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】权限设计的可能不需要),也有可能只需要拥【原创不易,请尊重版权】【转载请注明来源】有某些权限中的某一个就可以了。因此,这个【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】模块的设计上,需要加入这种逻辑关系字段。

【版权所有】唐霜 www.tangshuang.net【本文受版权保护】【版权所有】唐霜 www.tangshuang.net

三分层理论【关注微信公众号:wwwtangshuangnet】

【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】【作者:唐霜】【关注微信公众号:wwwtangshuangnet】

将三大管理体系各自分为三层,之所以要三层【转载请注明来源】本文版权归作者所有,未经授权不得转载。,是可以有比较合理的概念层级。例如用户,【版权所有】唐霜 www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】对于用户体系而言,应该存在起码三级属性,未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】即“organization-group【版权所有,侵权必究】未经授权,禁止复制转载。-user”这三层,一个人一定会存在一个【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】组中,而如果对组进行规整,有父级组,直到本文作者:唐霜,转载请注明出处。【作者:唐霜】它的顶点,就是包含所有用户的集合体,即一原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】个组织。但是还有一种情况是,有独立的用户【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】,比如sublime编辑器,很大一部分是著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。独立开发者进行购买,不过在我们讨论的这个转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net体系内,一般的情况都是有组织的。

【本文首发于唐霜的博客】【原创内容,转载请注明出处】【版权所有,侵权必究】

用户三层:机构-组-成员本文版权归作者所有,未经授权不得转载。

【未经授权禁止转载】【原创不易,请尊重版权】【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】

一个产品里面的用户可以散列存在,所有用户【关注微信公众号:wwwtangshuangnet】【版权所有,侵权必究】都是平级的,扁平的存在,这样的产品不是没著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net有。但是,三层理论并不排斥这种情况,这种【原创内容,转载请注明出处】【本文首发于唐霜的博客】情况并不影响三层理论发挥作用。

本文版权归作者所有,未经授权不得转载。【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。

用户三层结构体系【访问 www.tangshuang.net 获取更多精彩内容】

本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】

我们在任何用户体系中,都可以对用户进行分未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】组,或者贴标签。一般分组是按照用户的人事本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】关系组织,而贴标签一般是非管理类产品对用未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net户进行聚类的一种方式。但是无论哪一种,用本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net户对组,都是一对多的关系,即一个用户可以原创内容,盗版必究。【本文受版权保护】存在于多个组。对用户分组有一个好处,就是本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net将用户的特征提炼出来,一旦有了提炼特征的【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net途径,根据特征进行权限授予就很方便了。而【原创不易,请尊重版权】【未经授权禁止转载】且,组还可以分级,即一个父还可以分子组,【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】一直分下去,理论上无限级。父子关系意味着未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。继承关系,父级组对应的权限,可以被子组内【转载请注明来源】原创内容,盗版必究。成员继承,这也就给授予不同组成员一部分相【转载请注明来源】本文版权归作者所有,未经授权不得转载。同权限提供了可能。

【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】【版权所有,侵权必究】未经授权,禁止复制转载。【关注微信公众号:wwwtangshuangnet】

而机构(organization)则是这【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】些关系的最顶层,你无法找到一个更高级的概本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。念把所有同一个集合下的组囊括在内的概念。原创内容,盗版必究。【未经授权禁止转载】但它本质上虽然是组的最高级,却和用户存在未经授权,禁止复制转载。【本文受版权保护】一对一的关系,即一个用户只会存在于一个机原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】构中(不要和现实世界搞混,现实世界一个人【作者:唐霜】未经授权,禁止复制转载。可能同时有多个身份,但在一个系统中,他往【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net往仅可能只有一个organization【原创内容,转载请注明出处】【原创不易,请尊重版权】)。因此在数据库设计中,一个用户他和组的【未经授权禁止转载】原创内容,盗版必究。关系必然需要一张单独表来做,但是和机构的【本文首发于唐霜的博客】【原创内容,转载请注明出处】关系,可以直接使用一个字段就可以搞定了。

【未经授权禁止转载】原创内容,盗版必究。【作者:唐霜】本文版权归作者所有,未经授权不得转载。

认证【版权所有,侵权必究】

转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】【本文受版权保护】转载请注明出处:www.tangshuang.net【本文受版权保护】

在用户权限判断之前,其实还有一件事是用户【版权所有,侵权必究】转载请注明出处:www.tangshuang.net认证,不过这个工作现在已经有非常多工具可【访问 www.tangshuang.net 获取更多精彩内容】本文版权归作者所有,未经授权不得转载。以来做了,但是还是有必要说一下。一个用户【转载请注明来源】转载请注明出处:www.tangshuang.net在一个系统中,是有状态的,这个状态是指他转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。在这个系统中的生命值,即这个用户是否存在著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】、是否被禁用、是否是试用用户、是否需要被【未经授权禁止转载】【本文受版权保护】另外激活等等,很显然,只有具备特定正常状本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】态的用户,才有资格进入权限判断的阶段,否本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。则直接返回401. 不过大部分公司已经利著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。用工具做了认证这件事,他们试用apige原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】e等工具,提供用户数据,最终可以无需自己未经授权,禁止复制转载。【作者:唐霜】写在系统代码中去做用户认证,而是通过网关本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。进行认证。

原创内容,盗版必究。转载请注明出处:www.tangshuang.net【关注微信公众号:wwwtangshuangnet】

权限三层:许可证-角色-权限【转载请注明来源】

【本文受版权保护】【本文受版权保护】【本文首发于唐霜的博客】【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】

我将权限的相关概念抽象为三层,最低层面是原创内容,盗版必究。【原创不易,请尊重版权】权限(permission),其次是角色原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net(role),最高层面是许可证(lice本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。nse)。关于许可证的定位需要解释一下,著作权归作者所有,禁止商业用途转载。【本文受版权保护】为什么最高层是一个我们感觉不怎么用到的概【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】念呢?实际上,对于产品而言,你可以卖li【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】cense,也可以免费license,l【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。icense的正确理解是role set本文作者:唐霜,转载请注明出处。【原创不易,请尊重版权】(角色集合,即把多个角色打包成一个集合)【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。。license可以卖给个人,也可以卖给著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】公司。而如果将license附加到机构或转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。组身上,那么这个机构或组内的所有成员就可【原创不易,请尊重版权】原创内容,盗版必究。以拥有该license对应的所有角色的所未经授权,禁止复制转载。【作者:唐霜】有权限。

转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。【转载请注明来源】【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。

权限三层结构体系转载请注明出处:www.tangshuang.net

【本文受版权保护】本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。

问题是,为什么在所有的系统里面,一定要有【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】一个role的概念呢?为什么一个用户必须【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】通过role来决定权限呢?为什么不直接搞【转载请注明来源】【转载请注明来源】一张表,把user和permission【版权所有,侵权必究】【原创不易,请尊重版权】对应起来不就好了吗?这个办法不是不可以,【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】而是不够灵活。我们进行三层分设的目的,就【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】是要对已知概念进行抽象,通过抽象来达到灵本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net活通用的目的。实际上,和license是【原创不易,请尊重版权】【版权所有,侵权必究】role set一样,role是perm原创内容,盗版必究。转载请注明出处:www.tangshuang.netission set。我们可以设计一种演原创内容,盗版必究。【本文受版权保护】进式的角色配置,就像wordpress所【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net做的一样,角色具有递进式权限,从订阅者到未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。作者再到管理员,拥有不同程度的权限,最终未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net在界面上和动作上都会有不同效果。不过,我本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。们也可以把角色体系设计的毫无章法,完全根【版权所有,侵权必究】【本文受版权保护】据任何需要进行设置,可以有关,也可以无关【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net

【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。

那么,在一个系统,权限的本质是什么?实际本文作者:唐霜,转载请注明出处。原创内容,盗版必究。上,权限的本质,在一个系统中,就是一个标【本文受版权保护】【版权所有,侵权必究】志符。什么意思?就是单纯从某个权限的值而本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】言,它只是一个标记,没有任何价值,这个权原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】限的名称可以是 can_open_fil【本文受版权保护】未经授权,禁止复制转载。e can_remove_article【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】 等等,但是如果你脱离来if……else【未经授权禁止转载】【原创不易,请尊重版权】,他们就毫无意义。

【转载请注明来源】【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。

业务接口三层:模块-对象-动作本文作者:唐霜,转载请注明出处。

【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net

对于业务接口,其实也可以进行抽象为三层,转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net即模块-对象-动作(module-obj著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】ect-action)。模块(modul【本文受版权保护】【版权所有】唐霜 www.tangshuang.nete)也可以称为功能模块,也就是一系列接口【版权所有,侵权必究】【转载请注明来源】的集合。这一系列接口,可能是一个完整的工著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。作流,也可能是相互依赖的某种关系,总之,未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。可以将它们组合为一个模块,在权限分配的时本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。候,可以通过对该模块进行权限分配,一次性【访问 www.tangshuang.net 获取更多精彩内容】【版权所有,侵权必究】解决这一系列接口的权限问题。对象其实也就本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net是一个接口。动作则是对一个接口的不同行为【作者:唐霜】本文作者:唐霜,转载请注明出处。,即restful的不同action。

【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】【作者:唐霜】

在进行权限处理的时候,可以从顶层的模块开【未经授权禁止转载】【版权所有,侵权必究】始进行,在比较高层级的控制器里面加入对模转载请注明出处:www.tangshuang.net【版权所有,侵权必究】块权限的判断,其次对单一接口的权限进行判【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。断,最后才进入到某个具体操作的权限判断。转载请注明出处:www.tangshuang.net【转载请注明来源】虽然这样有可能会导致对单一动作的判断过于【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.net复杂,但是从架构上讲,会给系统性能带来一【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net定的好处。而且对于理解和后期扩展也是非常【关注微信公众号:wwwtangshuangnet】原创内容,盗版必究。有帮助,最起码代码会少写很多。

【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。【转载请注明来源】

业务三层结构体系【关注微信公众号:wwwtangshuangnet】

转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】【作者:唐霜】

分配器【版权所有】唐霜 www.tangshuang.net

【版权所有】唐霜 www.tangshuang.net【作者:唐霜】【本文受版权保护】【未经授权禁止转载】

我们现在有了三个体系:用户、权限、业务接【版权所有,侵权必究】【版权所有,侵权必究】口。也有了三层模型。现在的问题是,怎么样原创内容,盗版必究。【本文首发于唐霜的博客】让权限可以在这三个体系的三层模型间,更高【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。效的运行。

原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。

很明显,我们要有一个界面来给用户、组、机本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net构进行权限配置。而这个让用户可以进行权限本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。分配的界面背后,就是“分配器”。
【本文首发于唐霜的博客】著作权归作者所有,禁止商业用途转载。 分配器完成两个动作:转载请注明出处:www.tangshuang.net

未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】
  • 帮助管理者实现用户、权限、业务三者关系的【作者:唐霜】未经授权,禁止复制转载。建立
  • 原创内容,盗版必究。未经授权,禁止复制转载。原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net【转载请注明来源】
  • 在api调用中,实现用户、业务的权限约束
  • 原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net

说白了,所谓分配器,就是一大堆的“关系表本文作者:唐霜,转载请注明出处。著作权归作者所有,禁止商业用途转载。”。

未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。【转载请注明来源】【原创不易,请尊重版权】

现在,我们回到具体的写代码的场景中去。我【原创不易,请尊重版权】【原创内容,转载请注明出处】们现在提供了一个api,它的作用是让用户著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】提交一个表单保存到数据库中,在进行保存操转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。作之前,我们要对用户的权限进行判断,以决原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。定这个操作是否合法。

【版权所有,侵权必究】【版权所有,侵权必究】【作者:唐霜】

用户认证->通过用户认证信息得到该【版权所有,侵权必究】原创内容,盗版必究。用户的机构、组、私有权限->做并集【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。->逐层得到该操作的模块、接口、操【版权所有,侵权必究】【本文受版权保护】作的权限->逐层判断

著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net【作者:唐霜】
【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。【原创不易,请尊重版权】

而做并集这个过程,可能直接忽略了继承这个【转载请注明来源】本文作者:唐霜,转载请注明出处。过程,但是实际上,它就是用户继承了所在机【本文受版权保护】【转载请注明来源】构、组的权限。

未经授权,禁止复制转载。【未经授权禁止转载】【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.net

权限验证流程著作权归作者所有,禁止商业用途转载。

【版权所有,侵权必究】【版权所有,侵权必究】未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。

在取得用户权限时,由于要对license【访问 www.tangshuang.net 获取更多精彩内容】【本文受版权保护】的有效性进行验证,所以当某些licens原创内容,盗版必究。【原创不易,请尊重版权】e过期了,该用户也不会得到对应的权限。但未经授权,禁止复制转载。【原创不易,请尊重版权】是,这样的的操作流是在是很复杂,你需要不【作者:唐霜】【访问 www.tangshuang.net 获取更多精彩内容】断的从数据库里面去取出数据,并进行判断和原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】计算,对性能的影响是很大的。比较好的解决【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。方案是,我们要有一个机制去对所有的权限信未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。息进行缓存,而为了更好的利用缓存,我们要【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。跳过任何计算和判断阶段,因此,直接将单个著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】用户的所有缓存保存在redis等缓存数据未经授权,禁止复制转载。原创内容,盗版必究。库中,才是合理的。举一个例子,我们将用户本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】a的所有权限缓存在redis中,当用户访【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。问接口b时,先从缓存中取出a所拥有的全部【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。权限,在b的接口逻辑里面,有一种算法,可原创内容,盗版必究。【本文首发于唐霜的博客】以通过全部权限列表,快速得到b要求的权限【关注微信公众号:wwwtangshuangnet】【版权所有,侵权必究】是否存在于这个权限列表中。而何时更新缓存原创内容,盗版必究。未经授权,禁止复制转载。呢?有两种情况:后台管理界面手动更新;定【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。时任务,在license过期时更新。

【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。

比较复杂的是如何在业务逻辑中使用权限。我【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。们在后台创建权限时,并不考虑业务,一个p转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。ermission的名字可以叫can_r著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】emove_car_informatio本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。n,但这样会有一个问题,我们不是很好记忆原创内容,盗版必究。【本文受版权保护】这个权限的名字,而且这样很容易重名甚至占本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】用。比较好的解决方案是,把业务模块直接考转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。虑到permission的命名中,比如,【本文受版权保护】本文作者:唐霜,转载请注明出处。我们可以这样命名这个permission转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net:car.information.rem【作者:唐霜】原创内容,盗版必究。ove,car是module,infor【访问 www.tangshuang.net 获取更多精彩内容】【访问 www.tangshuang.net 获取更多精彩内容】mation是object,remove【原创不易,请尊重版权】【原创不易,请尊重版权】是action。当命名中需要分隔符时,使【作者:唐霜】【转载请注明来源】用下划线,比如:book.amount_【转载请注明来源】【关注微信公众号:wwwtangshuangnet】higher.update,这样可以让权本文作者:唐霜,转载请注明出处。原创内容,盗版必究。限在出现层级或并列意义的词汇时,不打乱点【本文首发于唐霜的博客】【本文受版权保护】(.)操作符的规律。

【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。【本文受版权保护】

但是,命名和业务模块紧紧是符号形式表面的【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。对应关系,并不存在实质的对应关系,而且,【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net不要把这个对应关系直接用于编程。接下来就【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。是编程了,我们在某个具体的api整套代码【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。逻辑中可能会这样:

著作权归作者所有,禁止商业用途转载。【转载请注明来源】本文版权归作者所有,未经授权不得转载。

RootController->M【版权所有,侵权必究】【转载请注明来源】oduleController->【版权所有,侵权必究】【原创不易,请尊重版权】ObjectController->著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。;Action

未经授权,禁止复制转载。转载请注明出处:www.tangshuang.net原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.net【本文受版权保护】
转载请注明出处:www.tangshuang.net原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】

我们可能会考虑某些中间件的方式来做,这样原创内容,盗版必究。未经授权,禁止复制转载。可以保证权限判断和正常的业务代码分离。在著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。每一个从父级controller进入子c【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】ontroller的时候,加入中间件,进著作权归作者所有,禁止商业用途转载。【转载请注明来源】行权限判断,倘若发现该用户没有进入该co【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。ntroller的权限,则直接返回一个权【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】限报错的逻辑,这样可以省下很多可能的代码【版权所有,侵权必究】【原创不易,请尊重版权】执行消耗,可以一定程度上提升性能。

【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】

但是,这里又会有一个问题,就是如果我们是未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。在后台去添加permission,那么意本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。味着代码中的硬编码和数据库中的软key必【版权所有,侵权必究】转载请注明出处:www.tangshuang.net须对应,这就很麻烦。比较合理的方法是,写【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】一个权限配置文件,系统里面所有的权限都在本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。这个文件里面,因此,代码层面做到完全硬编【本文受版权保护】转载请注明出处:www.tangshuang.net码。而在数据库层面,则是从role那一级【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。开始进行保存,同时保存role、lice【本文首发于唐霜的博客】【版权所有】唐霜 www.tangshuang.netnse这两个数据库key和硬编码的per【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】mission之间的关系到数据库中。但这本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。种情况必须要注意一个点,就是硬编码的pe【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.netrmission尽可能的不能变,如果非得【访问 www.tangshuang.net 获取更多精彩内容】本文作者:唐霜,转载请注明出处。变,一定要在后台即使去检查role、li著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netcense是否要移除这个permissi未经授权,禁止复制转载。本文版权归作者所有,未经授权不得转载。on。

【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。

总结【版权所有,侵权必究】

【本文受版权保护】【未经授权禁止转载】未经授权,禁止复制转载。

本文通过对一个产品系统里面的权限、用户、转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net业务接口进行抽象,得到一个三层模型,在这【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。个三层模型里面,只要分配好权限与用户、权【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。限与接口之间的关系,而不需要再把用户逻辑【本文受版权保护】【本文首发于唐霜的博客】、业务逻辑和权限杂糅在一起。权限就是选项【作者:唐霜】【本文首发于唐霜的博客】,就是can_write can_rea本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。d这样的字符串标识,没有实际的意义,只有【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。备注。只有当把权限标记应用到业务中进行逻【作者:唐霜】本文作者:唐霜,转载请注明出处。辑判断时,才有价值。这就是本文想要实现的【未经授权禁止转载】【原创不易,请尊重版权】一个目的。

转载请注明出处:www.tangshuang.net原创内容,盗版必究。原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。【本文受版权保护】

2018-05-13 7516 ,

为价值买单,打赏一杯咖啡

本文价值75.16RMB