同一公司下多个产品共享用户的权限设计系统

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

本文所阐述的场景是:一家公司或一个部门抑转载请注明出处:www.tangshuang.net转载请注明出处:www.tangshuang.net或一个组织,旗下拥有多个产品,这些产品之【转载请注明来源】未经授权,禁止复制转载。间存在一定的联系,比如共享用户(可以统一未经授权,禁止复制转载。【未经授权禁止转载】登陆各个产品),但在不同产品间拥有不同权本文作者:唐霜,转载请注明出处。原创内容,盗版必究。限,又比如,同一个资源(本文中的资源指系【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】统中的内容对象,例如一条交易记录,例如一【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。篇文章等等)在不同场景下对不同用户权限不【转载请注明来源】著作权归作者所有,禁止商业用途转载。同。

本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】未经授权,禁止复制转载。

对于用户而言,他没有买(获得)一个产品的转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。某个license,那他登陆产品后无法使【版权所有】唐霜 www.tangshuang.net著作权归作者所有,禁止商业用途转载。用这个license所对应的功能。对于公未经授权,禁止复制转载。【本文受版权保护】司而言,如何管理好被授权用户(可能是一个【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】公司购买了一个license,公司的所有转载请注明出处:www.tangshuang.net【原创不易,请尊重版权】员工都可以用)在不同产品下的权限,可不是本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】一件简单的事。现在,我就来设计一个这样的【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】系统。

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

对象设计本文版权归作者所有,未经授权不得转载。

【作者:唐霜】【本文受版权保护】【本文首发于唐霜的博客】【本文首发于唐霜的博客】【原创内容,转载请注明出处】

在这个系统里,会哪些基本的对象存在呢?它原创内容,盗版必究。原创内容,盗版必究。们又通过怎样的逻辑联系在一起呢?在这个系【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net统里,我们需要明确它们之间最终在UI界面转载请注明出处:www.tangshuang.net【作者:唐霜】上如何展示。

【原创不易,请尊重版权】【转载请注明来源】著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。

产品【访问 www.tangshuang.net 获取更多精彩内容】

【本文首发于唐霜的博客】【原创不易,请尊重版权】【未经授权禁止转载】本文作者:唐霜,转载请注明出处。原创内容,盗版必究。

我们首先需要在这个系统中创建一个产品(注【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】意,这个产品和我们线上运行的系统产品是两【转载请注明来源】【本文受版权保护】回事,这里的产品仅是一个代号,表示在我们转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。的权限设计系统中,用以区分用户、权限将在【转载请注明来源】本文版权归作者所有,未经授权不得转载。哪个产品中生效),当然,系统中存在多少产【转载请注明来源】【作者:唐霜】品完全是公司产品线决定的,我们希望公司无【本文首发于唐霜的博客】【访问 www.tangshuang.net 获取更多精彩内容】论未来多少产品,这个系统都能满足产品权限【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】控制的需要。

本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】原创内容,盗版必究。

角色未经授权,禁止复制转载。

【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。【本文受版权保护】【本文受版权保护】

这个产品的用户将被赋予某种角色。不同角色本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net的用户得到的权利(entitlement本文版权归作者所有,未经授权不得转载。【本文受版权保护】)不同,因此,实际上对于用户而言,他拥有【关注微信公众号:wwwtangshuangnet】【转载请注明来源】哪些权限,完全是因为他的角色而决定。

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

权利本文作者:唐霜,转载请注明出处。

【访问 www.tangshuang.net 获取更多精彩内容】【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net【未经授权禁止转载】

权利 entitlement 是权限的落【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。实点,用以告诉下游系统,某个功能是否可以【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】工作。

【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】【原创内容,转载请注明出处】

很多情况下,我们会用“权限 permis本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.netsion”来表达这里的“权利 entit原创内容,盗版必究。本文作者:唐霜,转载请注明出处。lement”。从词意上分析,“权限”是【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】设计规则,用以限制能力;“权利”是指获得转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。能力。这是我们日常设计中的一个知识缺陷,【转载请注明来源】【版权所有】唐霜 www.tangshuang.net简单的说,权限是本文所阐述的整套系统的总未经授权,禁止复制转载。【转载请注明来源】称,而权利才是用以控制系统功能是否拥有工【关注微信公众号:wwwtangshuangnet】【转载请注明来源】作能力的开关。我们日常常说的“权限”实际未经授权,禁止复制转载。【版权所有,侵权必究】上是指本文中的“权利”。

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

设计权利非常复杂,因为它们需要和实际业务本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】进行搭配。而且在最终的代码中有所体现。所【版权所有,侵权必究】【未经授权禁止转载】以,设计权利体系时既要从业务本身出发,也著作权归作者所有,禁止商业用途转载。著作权归作者所有,禁止商业用途转载。要从开发者的角度出发,否则很容易搞错。下【转载请注明来源】【原创不易,请尊重版权】文我会详细阐述,如何进行 entitle【转载请注明来源】【访问 www.tangshuang.net 获取更多精彩内容】ment 的分类设计,从而帮助业务运营者本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。和开发人员更好的使用。

【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】【转载请注明来源】【版权所有,侵权必究】

后文我们会讨论,我们不一定非得把 ent转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。itlement 放在本系统中管理,因为【本文首发于唐霜的博客】【作者:唐霜】不同的产品 entitlement 会有【原创内容,转载请注明出处】【作者:唐霜】很多,而且数据格式也不一定,我们不一定要【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】交付给产品 entitlement,而是本文版权归作者所有,未经授权不得转载。【原创不易,请尊重版权】只需要交付 role 给产品,由产品自己【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】决定一个 role 需要获得哪些 ent著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。itlement。

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

当一个用户拥有多个角色的时候,他将得到这【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。些角色权利的并集。当然,有的时候在一个产【原创内容,转载请注明出处】【原创不易,请尊重版权】品里,某些权利是互斥的,也就是说同时拥有原创内容,盗版必究。【作者:唐霜】这两个权利会产生冲突,因此需要产品内部做【关注微信公众号:wwwtangshuangnet】【访问 www.tangshuang.net 获取更多精彩内容】进一步处理,但对于我们这套系统而言,并不著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】需要考虑,我们要做的更通用一些。

转载请注明出处:www.tangshuang.net【转载请注明来源】【原创不易,请尊重版权】【本文首发于唐霜的博客】

许可证【转载请注明来源】

【转载请注明来源】本文作者:唐霜,转载请注明出处。【作者:唐霜】【作者:唐霜】

许可证是用来卖的,一个产品上线之后,用户【作者:唐霜】本文版权归作者所有,未经授权不得转载。想使用它,需要得到提供服务的公司的授权,【未经授权禁止转载】原创内容,盗版必究。通过一个许可证来得到使用的权利。而一个 【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.netlicense 可能包含一个或多个角色(转载请注明出处:www.tangshuang.net原创内容,盗版必究。本质上,一个 license 就是一个 转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。role set,即“角色组合”),拥有转载请注明出处:www.tangshuang.net【本文受版权保护】这个 license 的用户,就将得到这本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】些角色对应权利的并集。

本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。转载请注明出处:www.tangshuang.net

用户原创内容,盗版必究。

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

我们大多数产品都尝试过开发自己都用户管理【关注微信公众号:wwwtangshuangnet】未经授权,禁止复制转载。体系,但是,我们往往发现,越到后面,用户著作权归作者所有,禁止商业用途转载。【转载请注明来源】的权限越来越不好管理了。这是因为,一开始【原创内容,转载请注明出处】本文版权归作者所有,未经授权不得转载。设计用户体系的时候,就没有把各个概念想清【本文首发于唐霜的博客】【本文受版权保护】楚,导致想到一点加一点,到最后全部重新设【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。计过。而本文一开始,就将用户纳入权限设计本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net系统,避免产品设计一开始出问题。

转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】著作权归作者所有,禁止商业用途转载。

我们要管理的这些用户,他们可能会购买li【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】cense,也可能不会。有些产品可能并不【转载请注明来源】本文版权归作者所有,未经授权不得转载。需要license就能使用,只要这个用户原创内容,盗版必究。【作者:唐霜】存在于我们的系统里面。

【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。【作者:唐霜】

另一种情况是,对于2B的产品而言,往往就【本文受版权保护】未经授权,禁止复制转载。有一个以整个公司(firm)为对象的管理【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。单位,一个公司购买了一个license,【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。那么它下面的所有用户都将拥有这个lice【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】nse都权利。还有一种设计是,一次性卖个原创内容,盗版必究。【版权所有,侵权必究】这个公司特定数额都license,公司自【作者:唐霜】【访问 www.tangshuang.net 获取更多精彩内容】己去分配,当这些license用完之后,原创内容,盗版必究。本文作者:唐霜,转载请注明出处。你必须另外再买。这两种设计都是有的,不能【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。只取其一。

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

因此,我将用户体系设计为“组织(公司或公本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】益单位)-组(部门)-用户”。对于不同的【原创不易,请尊重版权】未经授权,禁止复制转载。产品而言,情况可能不同,有些产品仅卖给独【原创不易,请尊重版权】【转载请注明来源】立的用户,因此这些用户不存在三级组织关系原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。

【原创不易,请尊重版权】著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】

管理员【本文受版权保护】

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

管理员是登陆我们这个系统的用户,即可以把【本文首发于唐霜的博客】【版权所有,侵权必究】他们放置于上述用户管理体系内,也可以单独【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。作为一个模块。如果把他们置于上述体系,那【未经授权禁止转载】【本文受版权保护】么相当于把我们这个系统也变成了我们这个系【原创内容,转载请注明出处】未经授权,禁止复制转载。统里面的一个产品,这种自身包含自身的奇怪【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。逻辑让系统设计非常难理解。因此,我们还是著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。把管理员这个部分当作一个模块,管理员不是【本文受版权保护】【原创不易,请尊重版权】上述用户管理体系中的用户,而是本系统的用【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.net户,因此,这些管理员其实无法登陆本系统所本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】管理的那些产品。

著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。

我们需要三层管理员:超级管理员,产品管理【访问 www.tangshuang.net 获取更多精彩内容】【未经授权禁止转载】员,公司(组织、单位)管理员。超级管理员本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】登陆之后,可以创建产品、公司、管理员,并【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】且把管理员和产品、公司映射起来。产品管理【作者:唐霜】【本文首发于唐霜的博客】员主要任务是管理自己的产品内的用户的权限未经授权,禁止复制转载。【转载请注明来源】怎么分配,比如那些公司购买了我的lice本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。nse,这些公司的角色,公司内的某些组的【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。角色分配,甚至细到单个用户可以拥有哪些角【版权所有,侵权必究】未经授权,禁止复制转载。色。而公司管理员则无法对产品相关进行操作【访问 www.tangshuang.net 获取更多精彩内容】【作者:唐霜】,只能在有限的范围内为自己公司的组、用户【版权所有,侵权必究】【本文首发于唐霜的博客】进行角色分配和调整,而且,他只能看到自己转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】购买的license所拥有的权限。

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

对象关系原创内容,盗版必究。

【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。【转载请注明来源】未经授权,禁止复制转载。

上述这些对象,按照怎样的逻辑关联起来呢?著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。它们是怎么相互作用,最终得以控制产品的权本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。限的呢?

【作者:唐霜】本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】

一个用户权限管理系统的设计示意图未经授权,禁止复制转载。

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

理想的设计著作权归作者所有,禁止商业用途转载。

本文版权归作者所有,未经授权不得转载。【转载请注明来源】【版权所有,侵权必究】原创内容,盗版必究。

上图展示了这个系统的理想设计。未经授权,禁止复制转载。

著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。【作者:唐霜】未经授权,禁止复制转载。
  1. 系统上线之后,由超级管理员创建产品及其管原创内容,盗版必究。原创内容,盗版必究。理员。
  2. 原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。
  3. 随后,产品管理员登陆系统,创建这个产品的【版权所有】唐霜 www.tangshuang.net【未经授权禁止转载】role、entitlement和lic原创内容,盗版必究。【关注微信公众号:wwwtangshuangnet】ense。
  4. 【转载请注明来源】转载请注明出处:www.tangshuang.net【原创内容,转载请注明出处】
  5. 某个公司购买了该产品的 2 个 lice【原创内容,转载请注明出处】【转载请注明来源】nse:产品管理员在后台,创建该公司,并本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net将这两个 license 授权给该公司。
  6. 【版权所有】唐霜 www.tangshuang.net【本文首发于唐霜的博客】原创内容,盗版必究。转载请注明出处:www.tangshuang.net
  7. 该公司购买了该产品的 license 之【版权所有,侵权必究】转载请注明出处:www.tangshuang.net后,获得一个管理员账号,这个管理员可以登【转载请注明来源】本文版权归作者所有,未经授权不得转载。陆该系统,对自己公司内的用户体系及权限分【本文首发于唐霜的博客】【原创不易,请尊重版权】配进行管理。由于一个 license 的本文作者:唐霜,转载请注明出处。【访问 www.tangshuang.net 获取更多精彩内容】时候有限制,例如只能给 n 个人使用,因【转载请注明来源】转载请注明出处:www.tangshuang.net此,公司管理员要决定将这个 licens著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】e 分配给哪些人。一个 group 表示未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。这个 group 的人将同时继承该 gr【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】oup 的权利,但是必须注意,倘若这个 【原创内容,转载请注明出处】原创内容,盗版必究。group 的人数超出 license 【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net的使用人数,那么也会产生错误。
  8. 【转载请注明来源】【本文受版权保护】转载请注明出处:www.tangshuang.net【本文首发于唐霜的博客】
  9. 一个 license 是多个 role 原创内容,盗版必究。【版权所有,侵权必究】的集合,该公司获得多个 license 【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net之后,实际上获得了这些 role 的并集本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。。公司管理员,可以更为详细的进行分配,比本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】如,将某个 role 分配给某个 use未经授权,禁止复制转载。【版权所有,侵权必究】r。当然,license 里面的 rol未经授权,禁止复制转载。【访问 www.tangshuang.net 获取更多精彩内容】e 也受到 license 中授权数量的【本文首发于唐霜的博客】【本文首发于唐霜的博客】限制。
  10. 【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】【原创内容,转载请注明出处】
  11. 一个单用户,只想购买其中某一个功能,产品【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net管理员创建了一个新的 role,这个 r转载请注明出处:www.tangshuang.net原创内容,盗版必究。ole 在产品系统中仅开放了该功能,产品【作者:唐霜】【未经授权禁止转载】管理员创建了一个 license,且只包【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。含这个 role,并卖给了该用户。
  12. 【作者:唐霜】【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。

两个不同的产品之间需要共享用户和权限怎么著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net办呢?比如说,某两个产品,其实同时集成了原创内容,盗版必究。原创内容,盗版必究。同一个功能,希望它们的用户在产品 A 中本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net购买了 license,这些用户在产品 【版权所有,侵权必究】【关注微信公众号:wwwtangshuangnet】B 中照样还能用该功能。这种情况需要超级著作权归作者所有,禁止商业用途转载。未经授权,禁止复制转载。管理员在两个产品之间共享 role,这和原创内容,盗版必究。【原创内容,转载请注明出处】共享 user 是一样的道理。在共享 r【原创不易,请尊重版权】【版权所有】唐霜 www.tangshuang.netole 的基础上,可以共享 licens【版权所有】唐霜 www.tangshuang.net【版权所有】唐霜 www.tangshuang.nete,技术上就是做一个软链,或者通过克隆复本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。制一份,这两种方式都应该提供,因为有的时本文作者:唐霜,转载请注明出处。【本文受版权保护】候确实只要做一个克隆就可以了,而有的时候本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net,要同时编辑。

【关注微信公众号:wwwtangshuangnet】【作者:唐霜】本文版权归作者所有,未经授权不得转载。本文版权归作者所有,未经授权不得转载。

现实的考虑【未经授权禁止转载】

【作者:唐霜】原创内容,盗版必究。【本文受版权保护】

但是在现实中,我们可能并不存在超级管理员本文版权归作者所有,未经授权不得转载。未经授权,禁止复制转载。这样的角色。我所在的公司通过一家第三方公【原创内容,转载请注明出处】【版权所有】唐霜 www.tangshuang.net司来售卖 license,当和一家公司签【作者:唐霜】未经授权,禁止复制转载。约后,由这家第三方公司通过 api 把这【转载请注明来源】【作者:唐霜】个 license 的售卖情况写入到我们本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net的数据库中。所以,产品管理员其实没有创建【原创内容,转载请注明出处】【本文受版权保护】 license 和 organizat【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.netion 的权利,但是他需要维护一个 li转载请注明出处:www.tangshuang.net【未经授权禁止转载】cense 对应哪些 role。

【本文受版权保护】【作者:唐霜】【本文首发于唐霜的博客】原创内容,盗版必究。

我们也没有在自己的系统里实现 entit【未经授权禁止转载】原创内容,盗版必究。lement,因为它太庞大来。理想化的设【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】计是将 entitlement 实现在我本文作者:唐霜,转载请注明出处。本文作者:唐霜,转载请注明出处。们的系统里,一个产品通过 API,获取当未经授权,禁止复制转载。【原创不易,请尊重版权】前用户在当前产品下的所有权利,这样这个用【版权所有,侵权必究】原创内容,盗版必究。户对产品的操作权限就一清二楚。但是我们需【原创不易,请尊重版权】【作者:唐霜】要考虑两个因素:1.一个产品的 enti【版权所有】唐霜 www.tangshuang.net【作者:唐霜】tlement 可能有上千个,而且这些 【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.netentitlement 都会被产品的源码著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】使用,2.如果将 entitlement未经授权,禁止复制转载。【未经授权禁止转载】 放在我们这个系统,那么势必需要考虑和产转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】品共用数据库,产品不可能还要通过 api【作者:唐霜】本文作者:唐霜,转载请注明出处。 来获取这些 entitlement,这原创内容,盗版必究。本文作者:唐霜,转载请注明出处。肯定就影响性能,所以肯定会直接从数据库中本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】读取所有的 entitlement。基于【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net这两点考虑,我们并不在本系统中实现 en【关注微信公众号:wwwtangshuangnet】【转载请注明来源】titlement,而是在系统中提供一种【关注微信公众号:wwwtangshuangnet】【关注微信公众号:wwwtangshuangnet】嵌入方式,对于产品而言,仅仅需要知道一个转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net用户都属于哪些 role,然后利用这些 本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。role,去在产品自身的数据库中去找到这原创内容,盗版必究。【版权所有,侵权必究】些 role 对应的 entitleme【原创内容,转载请注明出处】未经授权,禁止复制转载。nt,也就是说,在我们的系统中,产品仅细未经授权,禁止复制转载。【原创内容,转载请注明出处】化到 role 这个层级。对于 enti未经授权,禁止复制转载。转载请注明出处:www.tangshuang.nettlement 这个层级,我们的系统提供【访问 www.tangshuang.net 获取更多精彩内容】【原创不易,请尊重版权】一个 iframe 的嵌入方式,由产品自【原创内容,转载请注明出处】【未经授权禁止转载】己的后台页面来进行控制。当然,如果我们不【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】提供这个 iframe,其实也是可以的,著作权归作者所有,禁止商业用途转载。【作者:唐霜】对于产品而言,一个 role 对应拥有哪【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。些 entitlement,应该都是已经【未经授权禁止转载】原创内容,盗版必究。固定的,在代码里面配置好表即可。

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

当然,还有一种情况,就是设计之初,系统允本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net许管理员通过后台的配置界面,对某些功能进本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】行开关操作。这种情况下,就必须将 ent著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.netitlement 做成在线的,而非写死在未经授权,禁止复制转载。未经授权,禁止复制转载。代码中。当然,其实,这两部分可以同时运用【转载请注明来源】原创内容,盗版必究。,将在线的,和写死在代码中的并集之后使用【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】,毕竟写死在代码中,性能比从数据库中读取【关注微信公众号:wwwtangshuangnet】【原创不易,请尊重版权】快的多(当然,缓存在 redis 中比写著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】死在代码里可能更快)。

【作者:唐霜】本文作者:唐霜,转载请注明出处。【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。

权限分层【原创不易,请尊重版权】

【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】【版权所有】唐霜 www.tangshuang.net【转载请注明来源】

对于一个用户的权限,它往往不是由单一的角著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。色信息决定的,而是由角色、许可证、业务逻本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】辑等综合决定的。我这篇文章设计的是站在一【关注微信公众号:wwwtangshuangnet】【本文首发于唐霜的博客】个公司拥有多条产品线的层面去思考。但是,【本文受版权保护】【作者:唐霜】当我们回到具体的某个产品的开发团队的角度【转载请注明来源】本文作者:唐霜,转载请注明出处。,也就是写业务 api 的开发同学的角度著作权归作者所有,禁止商业用途转载。【原创内容,转载请注明出处】,去思考这个权限系统,就会遇到各种各样的原创内容,盗版必究。本文作者:唐霜,转载请注明出处。麻烦。

【关注微信公众号:wwwtangshuangnet】本文版权归作者所有,未经授权不得转载。【本文首发于唐霜的博客】【本文首发于唐霜的博客】

这里提到的“权限分层”的概念,是基于将用【版权所有】唐霜 www.tangshuang.net本文作者:唐霜,转载请注明出处。户的权限看作“流”的基础上。当要得到一个转载请注明出处:www.tangshuang.net【转载请注明来源】用户是否对某个操作拥有权限时,要经过层层【未经授权禁止转载】【关注微信公众号:wwwtangshuangnet】判断,而非直接从数据库里面取出一个值就够本文版权归作者所有,未经授权不得转载。著作权归作者所有,禁止商业用途转载。了。代码层面,要通过取出很多值,然后根据著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。“层”的先后顺序,对该用户在每一层上的权【原创内容,转载请注明出处】转载请注明出处:www.tangshuang.net限“流”进行拦截和判断,如果不符合条件,【转载请注明来源】【版权所有,侵权必究】直接弹出,用户也就没有该权利,只有符合条【本文受版权保护】【关注微信公众号:wwwtangshuangnet】件,才会进入下一层进行判断。

原创内容,盗版必究。转载请注明出处:www.tangshuang.net【未经授权禁止转载】著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】

一个系统最终会有多少个权限控制流,这取决【原创不易,请尊重版权】【未经授权禁止转载】于有多少个增、删、查操作(接口)。对于一本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】个系统而言,可以说,几乎每一个 api 【转载请注明来源】未经授权,禁止复制转载。都会需要鉴权,如果为了控制界面,还可能需【本文首发于唐霜的博客】本文作者:唐霜,转载请注明出处。要有一个(堆)接口,帮助客户端判断当前这【本文受版权保护】转载请注明出处:www.tangshuang.net个用户是否要显示某些东西。而更重要的是 【版权所有】唐霜 www.tangshuang.net【关注微信公众号:wwwtangshuangnet】api 接口,这些接口控制着用户可以看到原创内容,盗版必究。【原创内容,转载请注明出处】的东西、可以进行的操作。但是,权限又不能【原创不易,请尊重版权】本文版权归作者所有,未经授权不得转载。直接反映在具体的某个字段上,它只能以背后【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。“隐藏的手”的形式存在。

原创内容,盗版必究。【访问 www.tangshuang.net 获取更多精彩内容】未经授权,禁止复制转载。

将成百上千的接口后面的权限判断,用分层的原创内容,盗版必究。转载请注明出处:www.tangshuang.net方式加以总结,会有不错的效果。但是,比较【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net麻烦的是,在撰写每一个接口的时候,都必须【本文受版权保护】【本文首发于唐霜的博客】要进行层层判断,完成这些判断之后,才能走【转载请注明来源】【版权所有】唐霜 www.tangshuang.net正常的业务逻辑。有没有一种方式,可以在更【关注微信公众号:wwwtangshuangnet】【原创内容,转载请注明出处】高一层去做这些分层的判断,而业务代码就是本文版权归作者所有,未经授权不得转载。本文作者:唐霜,转载请注明出处。业务代码,和权限判断分开?有一个概念叫“【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。API 网关”,我知道有一个叫 apig【版权所有,侵权必究】本文版权归作者所有,未经授权不得转载。ee 的系统专门实现了这种网关,有兴趣可【版权所有】唐霜 www.tangshuang.net【转载请注明来源】以了解一下。基于这种 API 网关的概念【原创不易,请尊重版权】【本文首发于唐霜的博客】,我们可以从新考虑 API 后台开发的架【版权所有,侵权必究】【访问 www.tangshuang.net 获取更多精彩内容】构,即在路由前面再加一层,用来做权限的判本文作者:唐霜,转载请注明出处。【版权所有,侵权必究】断。

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

entitlement 的设计【原创内容,转载请注明出处】

【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net【作者:唐霜】

实际上,权限系统就是上面的思路了。本节要转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。解决如何去设计 entitlement 【本文首发于唐霜的博客】本文版权归作者所有,未经授权不得转载。的系统管理。

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

分类方式原创内容,盗版必究。

【原创内容,转载请注明出处】本文作者:唐霜,转载请注明出处。转载请注明出处:www.tangshuang.net著作权归作者所有,禁止商业用途转载。本文版权归作者所有,未经授权不得转载。

首先,我们要明确一点,entitleme本文版权归作者所有,未经授权不得转载。原创内容,盗版必究。nt 的设计是为了控制用户是否可以对某个【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】功能进行使用。“使用”其实包含了两个东西未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net:1)界面上可以看到和操作;2)可以与服【访问 www.tangshuang.net 获取更多精彩内容】原创内容,盗版必究。务端接口实现数据读写。

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

因此,entitlement 的分类首先本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。要分这两种:

【原创内容,转载请注明出处】【版权所有,侵权必究】【原创内容,转载请注明出处】【原创内容,转载请注明出处】【未经授权禁止转载】
  • 展示性权利【未经授权禁止转载】
  • 原创内容,盗版必究。原创内容,盗版必究。著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】
  • 数据性权利【原创内容,转载请注明出处】
  • 【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。【本文受版权保护】

但并不意味着在存储时要分两个地方存储,因本文作者:唐霜,转载请注明出处。【原创内容,转载请注明出处】为同一个 entitlement 可以在【转载请注明来源】【版权所有】唐霜 www.tangshuang.net展示时被使用,也可以在数据读写时使用,因转载请注明出处:www.tangshuang.net未经授权,禁止复制转载。为它控制着某一个功能。这种分类给我们的建【本文受版权保护】【关注微信公众号:wwwtangshuangnet】议是,entitlement 的输出方式【原创不易,请尊重版权】转载请注明出处:www.tangshuang.net不同。很显然,展示性权利需要输出到前端。【转载请注明来源】著作权归作者所有,禁止商业用途转载。一种建议是,在前端资源中提供一个 pol【本文首发于唐霜的博客】【未经授权禁止转载】icies 的字段,每一个资源都有哪些权【原创内容,转载请注明出处】【关注微信公众号:wwwtangshuangnet】利,通过这个 policies 对象来了本文版权归作者所有,未经授权不得转载。【原创内容,转载请注明出处】解,前端也可以通过这个字段来进行界面上交转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。互的控制。

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

命名方式【访问 www.tangshuang.net 获取更多精彩内容】

【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】未经授权,禁止复制转载。

一个 entitlement 的命名,建【本文首发于唐霜的博客】【关注微信公众号:wwwtangshuangnet】议采用层级式的链式命名规则。例如 sign.review.list 这个权利,表示“是否拥有签署审批的列表【原创内容,转载请注明出处】【转载请注明来源】权限”,之所以这样设计,是因为我们还可以【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。sign.review 来控制整个“签署审批”功能,在一定场合本文版权归作者所有,未经授权不得转载。转载请注明出处:www.tangshuang.net下,起到简洁的控制方式。

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

开发方式本文作者:唐霜,转载请注明出处。

转载请注明出处:www.tangshuang.net本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】著作权归作者所有,禁止商业用途转载。

我们在判断一个用户是否拥有对某个模块进行著作权归作者所有,禁止商业用途转载。【访问 www.tangshuang.net 获取更多精彩内容】操作的权限时,我们不应该直接用用户的角色【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。进行判断,虽然确实用户角色意味着权限,但【版权所有】唐霜 www.tangshuang.net【原创内容,转载请注明出处】是假如一个用户需要经过多重身份判断时,会转载请注明出处:www.tangshuang.net【未经授权禁止转载】怎样?用角色判断,就是一连串的逻辑效应,原创内容,盗版必究。【转载请注明来源】麻烦。而 entitlement 是已经本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。通过角色判断的产出物,在开发时,应该用 【原创内容,转载请注明出处】【转载请注明来源】entitlement 进行判断。

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

当然,实际开发中,单纯 entitlem未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.netent 判断是不可能解决所有问题的,有的未经授权,禁止复制转载。【版权所有】唐霜 www.tangshuang.net时候还需要 entitlement 和其著作权归作者所有,禁止商业用途转载。【关注微信公众号:wwwtangshuangnet】他业务逻辑一起搭配判断才行。但是,总之,著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net我们尽可能只用 entitlement 【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。而不在业务逻辑判断中使用 role 进行【原创不易,请尊重版权】【访问 www.tangshuang.net 获取更多精彩内容】判断。

著作权归作者所有,禁止商业用途转载。【版权所有】唐霜 www.tangshuang.net原创内容,盗版必究。【本文受版权保护】
user roles -> [ computing ] -> business entitlement

在计算部分,一个 entitlement本文作者:唐霜,转载请注明出处。原创内容,盗版必究。 的计算可以写成一个封装的函数或方法,将【原创不易,请尊重版权】【未经授权禁止转载】来需要对 entitlement 的计算【未经授权禁止转载】本文版权归作者所有,未经授权不得转载。逻辑进行调整时,修改该函数即可。

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

多量的存取问题著作权归作者所有,禁止商业用途转载。

【转载请注明来源】【转载请注明来源】【版权所有,侵权必究】著作权归作者所有,禁止商业用途转载。

entitlement 用 01 表示允【转载请注明来源】本文作者:唐霜,转载请注明出处。许与不允许,用二进制转化为 62 进制进【原创不易,请尊重版权】【作者:唐霜】行存储,当 entitlement 的数【转载请注明来源】未经授权,禁止复制转载。量超过 256 时,将所有的 entit【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。lement 按每个单位 256 个的方【原创不易,请尊重版权】未经授权,禁止复制转载。式进行分组,每组单独得到一个 62 进制【未经授权禁止转载】原创内容,盗版必究。数,并用英文逗号隔开,将字符串保存到数据【本文首发于唐霜的博客】【本文受版权保护】库中,再采用 redis 将结果缓存起来【原创不易,请尊重版权】本文作者:唐霜,转载请注明出处。,随时读取,读取时,通过把 62 进制转【关注微信公众号:wwwtangshuangnet】【本文受版权保护】换为 2 进制得到想要的结果。

著作权归作者所有,禁止商业用途转载。本文作者:唐霜,转载请注明出处。本文版权归作者所有,未经授权不得转载。

多选项问题【作者:唐霜】

转载请注明出处:www.tangshuang.net【未经授权禁止转载】【访问 www.tangshuang.net 获取更多精彩内容】【转载请注明来源】

某一个 entitlement 可能有多本文版权归作者所有,未经授权不得转载。【关注微信公众号:wwwtangshuangnet】个选项,0 代表不可读写,比如 1 代表【本文受版权保护】【转载请注明来源】可读,2 代表可读写。这种情况怎么办呢?

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

对单记录的权限问题原创内容,盗版必究。

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

某一个后面新加进数据库的某条记录,一个用【转载请注明来源】著作权归作者所有,禁止商业用途转载。户想要对这个记录进行操作,必须要获得对该本文作者:唐霜,转载请注明出处。【关注微信公众号:wwwtangshuangnet】记录的对应权限。这种将权限细化到单条记录【关注微信公众号:wwwtangshuangnet】【本文受版权保护】的情况怎么办?(这已经超出了本文权限设计【版权所有】唐霜 www.tangshuang.net【转载请注明来源】系统的范畴。)

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

API 设计原创内容,盗版必究。

著作权归作者所有,禁止商业用途转载。【版权所有,侵权必究】【作者:唐霜】本文版权归作者所有,未经授权不得转载。

最后,我们要为产品提供api,让产品可以【关注微信公众号:wwwtangshuangnet】【未经授权禁止转载】通过这些api来获取某个用户的权利列表。原创内容,盗版必究。【版权所有,侵权必究】可以说,本系统是一个用户管理系统和权限管【转载请注明来源】未经授权,禁止复制转载。理系统的并集。

著作权归作者所有,禁止商业用途转载。原创内容,盗版必究。【未经授权禁止转载】【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】

首先要解决的是用户的注册、登陆、密码设置著作权归作者所有,禁止商业用途转载。【本文首发于唐霜的博客】等问题。目标公司的产品,所有用户都通过这本文版权归作者所有,未经授权不得转载。【本文受版权保护】个系统来进行注册、登陆,因此,需要本系统【原创不易,请尊重版权】【原创内容,转载请注明出处】提供完整都Oauth方案。

【版权所有,侵权必究】【版权所有】唐霜 www.tangshuang.net【本文受版权保护】【本文首发于唐霜的博客】原创内容,盗版必究。

其次要解决用户信息都修改,也就是说在本系本文作者:唐霜,转载请注明出处。【本文受版权保护】统自己提供都UI界面之外,其他产品,如果【原创内容,转载请注明出处】【作者:唐霜】有权限,可以通过api进行用户操作,比如原创内容,盗版必究。本文版权归作者所有,未经授权不得转载。修改用户的基本信息,重设用户的role列【本文受版权保护】转载请注明出处:www.tangshuang.net表等。实际上,系统本身的UI界面,也是通本文版权归作者所有,未经授权不得转载。【版权所有】唐霜 www.tangshuang.net过这些API来操作的,UI界面其实是本系【版权所有】唐霜 www.tangshuang.net【原创不易,请尊重版权】统的一个app实例。

未经授权,禁止复制转载。【本文受版权保护】本文版权归作者所有,未经授权不得转载。

最后就是要能够根据登陆产品的用户,来获取【访问 www.tangshuang.net 获取更多精彩内容】【版权所有】唐霜 www.tangshuang.net这个用户的权利。如果一个用户登陆了某个产转载请注明出处:www.tangshuang.net【版权所有】唐霜 www.tangshuang.net品,那么接下来,产品系统会通过api从本著作权归作者所有,禁止商业用途转载。【未经授权禁止转载】系统获取这个用户在该产品里面拥有哪些权限本文作者:唐霜,转载请注明出处。【本文首发于唐霜的博客】,获得这些信息之后,用户在产品内的界面现【本文受版权保护】著作权归作者所有,禁止商业用途转载。实、操作都会受到影响。

原创内容,盗版必究。转载请注明出处:www.tangshuang.net本文版权归作者所有,未经授权不得转载。

小结原创内容,盗版必究。

【原创不易,请尊重版权】【关注微信公众号:wwwtangshuangnet】本文作者:唐霜,转载请注明出处。

这是一个common的用户权限管理系统设原创内容,盗版必究。【作者:唐霜】计,也就是说它没有考虑每个产品的特殊需要本文版权归作者所有,未经授权不得转载。【未经授权禁止转载】。为了让系统更具有扩展性,在开发这套系统【访问 www.tangshuang.net 获取更多精彩内容】转载请注明出处:www.tangshuang.net时,应该在某些环节考虑留下hook,以方【原创不易,请尊重版权】原创内容,盗版必究。便日后在某些逻辑过程中新增功能。

本文版权归作者所有,未经授权不得转载。【本文受版权保护】【版权所有】唐霜 www.tangshuang.net【版权所有,侵权必究】【版权所有,侵权必究】

当然,本文有一些地方并没有提及,比如对于【版权所有】唐霜 www.tangshuang.net转载请注明出处:www.tangshuang.net一个产品而言,能够从本系统获取信息,也需【未经授权禁止转载】【本文受版权保护】要鉴权,可以通过appkey+secre【版权所有,侵权必究】本文作者:唐霜,转载请注明出处。tkey的方式。这些细节其实在业界都是有【版权所有】唐霜 www.tangshuang.net未经授权,禁止复制转载。成熟的解决方案,只需要去实现即可。

【本文首发于唐霜的博客】转载请注明出处:www.tangshuang.net【访问 www.tangshuang.net 获取更多精彩内容】

2018-03-04 11784

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

本文价值117.84RMB