权限管理设计的一些感悟

见过一种设计,将权限系统分为三种对象:用户、角色和组。

1.  角色是权限系统的基本单位,我们常常为角色赋予各种权限。同时角色可以赋予其他角色。

2.  用户,可以被赋予各种角色。同时可以被赋予各种权限。

3.  组,作用类似于文件夹,用于盛放用户与角色。同时可以被赋予各种角色。同时可以被赋予各种权限。

4.  权限管理中,存在特殊的角色:admin_role和group_admin_role。前者为系统管理员角色,后者为组管理员角色。

5.  系统中存在特殊用户:admin。此为系统管理员,不能删除、改变。

对于上述设计在实际情况中,发生了一些问题,或者说教训。

1.  创建角色role1、role2、role3,将role1赋予role2,role2赋予role3,role3赋予role1,这样在权限读取中会形成死循环。

2.  系统运行时,常常(经常进行这种运算)需要识别一个用户是否为系统管理员或组管理员或者其他权限。以判断某用户是否具备某种权限为例,常常需要这样:

     a.  查看user是否具有此权限。时间复杂性为 :O(1)。

     b.  参看user被赋予的role,是否具有此权限。时间复杂性为 :O(n)。

     c.  层层遍历user所在组具备的权限,即这些组被赋予的role。时间复杂度为:O(n2)。

     d.  递归遍历上述role中被赋予的role,是否具备此权限。时间复杂度为 :我也不知道它的时间复杂度了。

3.  出现将admin_role或group_admin_role直接赋予到“组”上的情况。这样一组人都成了超级管理员或组管理员了。

4.  实际设计中,发现role只需要放置在根目录就可以了,不需要分组。而且如果将其放在其他组,会导致遍历权限的时间复杂度。

教训的总结:

1.  组和用户,不能直接被赋予权限。

2.  角色不能再赋予其他角色。

3.  admin_role和group_admin_role在设计中,就应该和其他role区分开。对他们两个的进行一些限制,如不能被编辑,不能赋予组等。不设置这两个role,只是对user中设置单独的标记(是否为管理员),在用户编辑页面,提供“将此用户设为管理员”的勾选操作。

4.  将“role的结构树”从“用户、组的结构树”中独立出来,因为role的组织结构中,根本不需要“文件夹”这一概念。

时间: 2024-07-30 11:07:14

权限管理设计的一些感悟的相关文章

通用权限管理设计

权限设计(初稿)     1. 前言:     权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.     2. 目标:     直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统

系统权限管理设计 (转)

权限设计(初稿)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案.      2. 目标:      直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用一个权限系统解

系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555) 1. 前言: 权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案. 2. 目标: 直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重

通用权限管理设计 之 数据权限

阅读目录 前言 初步分析 通用查询机制 数据权限规则 实际应用 结语 前言 前一篇文章<通用权限管理设计 之 数据库设计方案>介绍了[主体]- [领域] - [权限]( who.what.how问题原型 ) 的设计思想 本文将对这种设计思想作进一步的扩展,介绍数据权限的设计方案. 权限控制可以理解,分为这几种 : [功能权限]:能做什么的问题,如增加产品.[数据权限]:能看到哪些数据的问题,如查看本人的所有订单.[字段权限]:能看到哪些信息的问题,如供应商账户,看不到角色. 部门等信息. 上面

[转]实现业务系统中的用户权限管理--设计篇

  实现业务系统中的用户权限管理--设计篇 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能.因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门

统一身份管理中的权限管理设计

关注嘉为科技,获取运维新知 权限集中管理是统一身份管理关注的主要内容之一,由于企业应用建设的自身历程不同,权限设计与实现也必然存在差异,针对集中权限管理的设计和实现带来了不小的挑战,本文根据多年的实践经验,就统一身份管理的集中权限管理的设计与实现给予设计建议. 一 问题背景 随着信息技术和网络技术的迅猛发展,企业内部的应用系统越来越多,为此,为减少用户访问的麻烦,提升访问的便利性和体验,众多企业采用了统一身份管理的方案来解决该问题. 就企业的统一身份管理,业界提出了相应的标准,即4A标准,分别是

通用权限管理设计 ( 数据库结构设计)

一,前言  权限管理系统的应用者应该有三种不同性质上的使用, A,使用权限 B,分配权限 C,授权权限 本文只从<使用权限>和<分配权限>这两种应用层面分析,暂时不考虑<授权权限>这种. 二,初步分析 用户和角色 说到权限管理,首先应该想到,当然要设计一个用户表,一个权限表.这样就决定了一个人有什么样的权限. 做着做着就会发现这样设计太过繁琐,如果公司里面所有员工都有这样的权限呢,每一个人都要配置?那是一件很痛苦的事情.因此再添加一个角色表,把某些人归为一类,然后再把权

java web简单权限管理设计

一套最基本的权限管理包括用户.角色.资源. 数据库设计 我的设计如下: 用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单.子菜单.按钮等资源) 角色-资源:role_resource 标准的权限管理系统设计为以上5张表. 注:用户.用户-角色我就不做说明了,这两个是很简单的两块,用户的crud,以及为用户分配角色(多对多的关系)稍微琢磨一下就清楚了,下面都是针对为角色分配权限的实现 后台实现 展示层采用ztree树 <%@ page conte

OA系统权限管理设计(转载)

不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l         不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最主要的功能. l         能够对"组"进行权限分配.对于一个大企业的业务系统来说,假设要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情.所以,系统中就提出了对"组"进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配. l