通用权限管理设计 之功能权限

一,前言 

权限管理系统的应用者应该有三种不同性质上的使用,

A,使用权限

B,分配权限

C,授权权限 

本文只从《使用权限》和《分配权限》这两种应用层面分析,暂时不考虑《授权权限》这种。

二,初步分析

用户和角色 

说到权限管理,首先应该想到,当然要设计一个用户表,一个权限表。这样就决定了一个人有什么样的权限。

做着做着就会发现这样设计太过繁琐,如果公司里面所有员工都有这样的权限呢,每一个人都要配置?那是一件很痛苦的事情。因此再添加一个角色表,把某些人归为一类,然后再把权限分配给角色。角色属下的用户也就拥有了权限。

用户、角色之间的关系是一个用户可以对应多个角色,一个角色可以对应多个用户。多对多关系。

所以需要一个中间表,相信大家都很熟悉,自然不会有疑问。

应用场景 

有了用户和角色以后,就需要设计应用场景,比如一个应用程序有几大模块(系统模块、项目管理模块、销售模块),

类似这样的模块就是一种应用场景,常见的还有 菜单 、 操作 等等。

假设现在我们设计好了,应用场景包括 模块、菜单、和操作,那么应该有以下六种关系

  1. 一个用户可以对应多个模块,一个模块可以对应多个用户。多对多关系。
  2. 一个用户可以对应多个菜单,一个菜单可以对应多个用户。多对多关系。
  3. 一个用户可以对应多个操作,一个操作可以对应多个用户。多对多关系。
  4. 一个角色可以对应多个模块,一个模块可以对应多个角色。多对多关系。 
  5. 一个角色可以对应多个菜单,一个菜单可以对应多个角色。多对多关系。  
  6. 一个角色可以对应多个操作,一个操作可以对应多个角色。多对多关系。

于是建立六张表来维护这六种关系。

这样设计看起来没什么问题。是的,如果没有加入新的关系的话,这样是已经可以满足大部分的需求了。可是如果就是如果,新的关系(需求)往往会加入到系统进来。这个时候就需要再建立一个新的表。系统的复杂度也随着增加。

可以看出,这样的设计有几个问题:

  1. 数据表设计太复杂
  2. 应对系统方案过于固定

三,把问题简单化

 不同的应用场合,你可能会想出不同的需求,提了一个新的需求以后,可能会发现原来的设计没方法实现了,于是还要添加一个新的表。这也是上面所提到的问题。 

 其实不必想得那么复杂,权限可以简单描述为:

某某主体 在 某某领域 有 某某权限 

1,主体可以是用户,可以是角色,也可以是一个部门

2, 领域可以是一个模块,可以是一个页面,也可以是页面上的按钮

3, 权限可以是“可见”,可以是“只读”,也可以是“可用”(如按钮可以点击)

其实就是Who、What、How的问题

因此上面所提到的六张表其实可以设计一张表:Privilege

 

四,实例说明

下面用一个例子做设计说明。“用户、角色在页面上的是使用权限”

详细设计:

1,把菜单的配置放在数据库上,每一个菜单对于一个唯一的编码MenuNo,每一个“叶节点”的菜单项对于一个页面(url)。

2,把按钮的配置放在数据库上,并归属于一个菜单项上(其实就是挂在某一个页面上)。应该一个页面可能会有几个按钮组,比如说有两个列表,这两个列表都需要有“增加、修改、删除”。所以需要增加一个按钮分组的字段来区分。

3, 把菜单权限分配给用户/角色,PrivilegeMaster为"User"或"Role",PrivilegeMasterValue为UserID或 RoleID,PrivilegeAccess为“Menu",PrivilegeAccessValue为 MenuNo,PrivilegeOperation为"enabled"

4,把按钮权限分配给用户/角 色,PrivilegeMaster为"User"或"Role",PrivilegeMasterValue为UserID或 RoleID,PrivilegeAccess为“Button",PrivilegeAccessValue为 BtnID,PrivilegeOperation为"enabled"

5,如果需要禁止单个用户的权限,PrivilegeOperation 设置为"disabled"。

如果不清楚的可以看下图:

 数据库设计:

四,结语

说了这么多,其实我推荐的只是Privilege的表设计。这个表是who、what、how问题原型的设计。不仅扩展性、灵活性都很好,而且将复杂的权限管理系统浓缩成一句话。

 而PrivilegeOperation不仅仅只是使用和禁止两种,包括分配权限、授权权限,都可以用这个字段定义。只是这无疑加大了应用程序的设计难度,但是对于表设计可以不做出任何的修改就可以完成,可以看出其灵活性。

时间: 2016-05-12

通用权限管理设计 之功能权限的相关文章

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

本文将对这种设计思想作进一步的扩展,介绍数据权限的设计方案. 权限控制可以理解,分为这几种 : [功能权限]:能做什么的问题,如增加产品.[数据权限]:能看到哪些数据的问题,如查看本人的所有订单.[字段权限]:能看到哪些信息的问题,如供应商账户,看不到角色. 部门等信息. 上面提到的那种设计就是[功能权限],这种设计有一定的局限性,对于主体,只能明确地指定.对于不明确的,在这里可能就没办法处理.比如下面这几种情况: Java代码   数据仅当前部门及上级可见   数据仅当前用户(本人)可见  

广告系统总结之权限管理设计与结构设计

免费广告系统多种多样,他们背后的共同点有哪些?哪些系统设计合理? 在总结了广告系统设计中<互联网精准广告定向技术>之后,作者又继续深入研究了广告系统设计中的权限管理设计以及结构设计,并从广告端与网站端两方面,进行了详细的阐述. 广告系统的权限管理设计 广告系统设计中,除了广告定向技术的运用以及广告投放流程的设计外,最复杂的就是权限管理的设计.不同于其他行业,广告公司或者媒体公司日常业务比较复杂,从职能来讲,包括销售.客户服务.客户执行.创意设计.策略策划.媒介计划.媒介执行.合同管理.财务审核

关于权限管理设计文章整理,希望对大家有所帮助

关于权限管理文章整理 1. AppBox v2.0中的权限实现 http://www.cnblogs.com/sanshi/p/3274824.html  2..NET通用权限系统快速开发框架 http://blog.csdn.net/shecixiong/article/details/10574967 3. 通用权限管理 http://blog.csdn.net/xiyang_1990/article/details/9768385 4. ASP.NET MVC+EF框架+EasyUI实现权

权限管理设计、分析、实现参考资料

AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据不同用户权限有不可见.可见.编辑 三种操作权限 http://community.csdn.net/Expert/topic/3436/3436974.xml?temp=.0139429 做过权限管理和想做权限管理的人进来(附我的思路) http://community.csdn.net/Exper

通用权限管理设计篇(一)

一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来 更好的思考一下权限系统的设计. 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新对系统的权限进行设 计,以满足不同系统用户的需求,将会浪费我们不少宝贵时间,所以花时间来设计一个相对通用的权限系 统是很有意义的. 二.设计目标 设计一个灵活.通用.方便的权限管理系统. 在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢?我们可以 把这些资源简单概括为

通用权限管理设计

最近又碰到了权限的分配和管理,需要单独设计一套结构.其实以前有了很多的这方面的设计和博文 ,在园子里面的找找看就会找到N页的结果. 这里也不敢说是新思路吧,权当是自己的总结和留个脚印吧,方便查找. 通用在这里有两个概念: 1.为了吸引眼球 一看到是通用就要点开看看究竟,当然了,结果无非是几种,有人骂,有人捧,有人不感兴趣,有人 回帖探讨. 2.通用的范围 通用不是说一概而论的通用,哪里都可以用,肯定存在调整或者根本就不能用的地方,有存在的合理 性和范围的. 本文将权限管理划分为对人.应用和权限的

通用权限管理设计篇(二)——数据库设计

理清了对象关系之后,让我们接着来进行数据库的设计.在数据库建模时,对于N对N的 关系,一般需 要加入一个关联表来表示关联的两者的关系.初步估计一下,本系统至少需要十张表,分别为:权限表. 用户表.角色表.组表.用户权限关联表.用 户角色关联表.角色权限关联表.组权限关联表.组角色 关联表.用户属组关联表.当然还可能引出一些相关的表.下面让我们在PowerDesigner中画出各表吧. 各表及其关系如下: 1.用户表 用户表(TUser) 字段名称 字段 类型 备注 记录标识 tu_id bigi

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

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

用户权限管理设计[图文说明]_相关技巧

最近在一个项目中设计的一个用户权限的设计,很乐意与大家一起讨论及分享. 设计思路 我的设计思路或者说是我想要实现的功能 1.用户的权限通过角色来控制,一个用户可以拥有多个角色. 2.用户拥有不同角色时,其权限应该是多个角色相互的补集. 3.一个角色拥有多个模块 4.用户的前台菜单显示根据角色所拥有的模块所决定,不同的用户在前端显示的操作菜单是不一样的. 5.页面中的功能按钮根据模块中所包含的功能所定义,通过模块及角色所拥有的权限进行控制 6.可看某个模块有哪些用户,哪些对应角色,并对其进行特殊权