通用权限管理系统总结梳理及技术细节

通用权限管理系统的总结梳理及技术细节

一、基本权限管理系统

基本的权限管理系统,基本遵循RBAC(Role-Base Accese Control)的模式

基本流程图,分拆

基本模式,class和action分开


基本流程图,合并

但我们实际业务中,我们多把class和action合在一起

如果是内容类,比如cms这种,我们一般采用拆开的方式,因为这种资源-操作拆分的方式有意义。

如果是审批类,比如oa系统这种,我们一般采用合并的方式。


二、通用权限管理系统

当业务越来越多,都需要权限管理系统的时候,通用权限管理系统就显得迫在眉睫。

而通用权限管理系统中,粒度划分尤为重要。

1.粒度划分

权限的最小粒度,一般以一个接口为一条权限

比如 /bbs/create (代表论坛发帖)  这种接口为最小粒度,好处是便于管理。

而如果是 /bbs/create?cid=123&pid=456 这种,我们还是按照 /bbs/create 这种粒度划分,而里面的参数,一般的做法是在create这个接口里面再单独做权限判断。保证最小粒度的权限足够简单,权限管理部分职责单一,而与业务强耦合的功能放在业务里做。

也就是可以分成 平台权限业务权限。


2.结构图


通用权限管理系统结构图


如图所示,通用权限管理系统中,用户可能会是域账号登陆,外部的域账号只与用户关联与系统无关。

为了适应不同场景,用户、应用、角色三者会关联成一张表。


关系表

这个表的作用是告诉系统,哪个用户在哪个应用下对应哪一个角色

角色跟资源的关系还是跟普通的权限系统保持一致。

如 用户A 在 OA 下是 管理员,用户A 在 ACL 下是 用户。

通过这个对应关系,基本可以满足各种不同的应用场景。

而数据资源作为可选项,在某些场景下也可能存在。

如用户A 在 DZZ 游戏下是管理员,用户A 在DQY 游戏下是GM。

这里需要关注的一点是,这个表基本都是一个用户对应一个游戏为一条数据,而不会一个用户对应多个游戏为一条数据。这是因为首先权限系统比较复杂,我们这么做为了使权限管理更加简单不使问题复杂化。另一个原因是真实使用场景中,这种一对多的关系比较少,复用率很低,而且变化的时候不灵活。

三、实际应用场景的思考

对于B端产品,可能会有多个系统部署在用户机器上,比如一个机器上有OA和ERP系统,两套系统都需要账户体系和权限管理系统,这个时候就可以用通用权限管理系统互相打通。但是通用权限系统貌似减少了开发成本,但是也有可能维护成本极高,要使用不同的系统之间的差异。

因此,设计通用权限管理系统的时候,往往通用权限系统只做一部分最简单的,最基础的权限控制,而跟业务耦合的权限管理则在各自系统本身的业务逻辑里面。

所以,才有了文章开头的粒度问题。

我们的粒度一般分到URI级别,每一个请求没有个URI都是一个资源,一个资源对应一条权限。

比如用户发帖这种问题,发帖接口可能是一个接口,但是里面还会涉及到用户是否可以发图片的这种权限。

这种情况下,比较推荐的做法是用户发帖还是一个权限,由通用权限系统处理,而发图片权限,则再由业务逻辑判断。class+action这一层最好职责单一,不掺杂业务判断,这样比较好管理,同时保持通用权限管理系统的纯粹性。

四、关于菜单

在实际场景中,每个项目都有菜单,当业务场景比较单一的情况下,菜单也可以做到通用权限管理系统中统一处理。

一个菜单对应一个资源,也可以对应多个资源

一般流程为:应用获取菜单总数据,查询这个用户信息,再通过权限系统查询这个用户uid对应每个资源是否有权限,然后洗掉没权限的菜单,留下这个用户在这个应用下的菜单。


菜单结构图

如图所示,菜单可以只跟用户关联,所有的操作都是从用户这个纬度进行查询,这也也保持了基础权限管理系统的完整性。

当然,菜单可以不做在通用权限管理系统里做在业务层里,具体问题具体分析。


五、其他

现实应用场景中,对于应用来说,简单的做法是用户的相关权限操作都去请求通用权限管理系统,能操作就返回true,不能操作返回false。但如果需要的权限请求非常多,也可以一次性全部取全,再业务层自己处理。

实际开发中,权限管理原则大部分是视图不做强限制,数据强限制。

用户如果足够多,且权限差不多是,会分成用户组进行管理。

用户权限的继承基本在实际场景下不会考虑,因为一旦后期用户权限发生改变,牵连过大。

而用户权限的互斥一般只在业务在使用,保证通用权限管理系统的可维护性和通用性,特殊需求业务自己要求就好了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容