权限管理模块设计

转:https://www.cnblogs.com/myindex/p/9116177.html

我们比较常见的就是基于角色的访问控制,用户通过角色与权限进行关联。简单地说,一个用户拥有多个角色,一个角色拥有多个权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间、角色与权限之间,通常都是多对多的关系。如下图:

基于这个,得先了解角色到底是什么?我们可以理解它为一定数量的权限的集合,是一个权限的载体。例如:一个论坛的“管理员”、“版主”,它们都是角色。但是所能做的事情是不完全一样的,版主只能管理版内的贴子,用户等,而这些都是属于权限,如果想要给某个用户授予这些权限,不用直接将权限授予用户,只需将“版主”这个角色赋予该用户即可。

但是通过上面我们也发现问题了,如果用户的数量非常大的时候,就需要给系统的每一个用户逐一授权(分配角色),这是件非常繁琐的事情,这时就可以增加一个用户组,每个用户组内有多个用户,除了给单个用户授权外,还可以给用户组授权,这样一来,通过一次授权,就可以同时给多个用户授予相同的权限,而这时用户的所有权限就是用户个人拥有的权限与该用户所在组所拥有的权限之和。用户组、用户与角色三者的关联关系如下图:

通常在应用系统里面的权限我们把它表现为菜单的访问(页面级)、功能模块的操作(功能级)、文件上传的删改,甚至页面上某个按钮、图片是否可见等等都属于权限的范畴。有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成“用户-角色-权限-资源”的授权模型。而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联,这样可能更具便捷性和易扩展性。如下图:

这里特别需要注意以下权限表中有一列“PowerType(权限类型)”,我们根据它的取值来区分是哪一类权限,可以把它理解为一个枚举,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操作权限、“FILE”表示文件的修改权限、“ELEMENT”表示页面元素的可见性控制等。

这样设计的好处有两个。一、不需要区分哪些是权限操作,哪些是资源,(实际上,有时候也不好区分,如菜单,把它理解为资源呢还是功能模块权限呢?);二、方便扩展,当系统要对新的东西进行权限控制时,我只需要建立一个新的关联表“权限XX关联表”,并确定这类权限的权限类型字符串即可。

需要注意的是,权限表与权限菜单关联表、权限菜单关联表与菜单表都是一对一的关系。(文件、页面权限点、功能操作等同理)。也就是每添加一个菜单,就得同时往这三个表中各插入一条记录。这样,可以不需要权限菜单关联表,让权限表与菜单表直接关联,此时,须在权限表中新增一列用来保存菜单的ID,权限表通过“权限类型”和这个ID来区分是种类型下的哪条记录。最后扩展出来的模型完整设计如下图:

注意上面我额外增加了一个操作日志表;

随着系统的日益庞大,为了方便管理,如果有需要可引入角色组对角色进行分类管理,跟用户组不同,角色组不参与授权。例如:当遇到有多个子公司,每个子公司下有多个部门,这是我们就可以把部门理解为角色,子公司理解为角色组,角色组不参于权限分配。另外,为方便上面各主表自身的管理与查找,可采用树型结构,如菜单树、功能树等,当然这些可不需要参于权限分配。

数据字典:

1.用户表:


用户信息表(UserInfo)


字段名称


字段


类型


备注


用户ID


ID


Int


PK not null


用户名


UserName


Varchar(20)


not null

2.角色表:


角色表(Role)


字段名称


字段


类型


备注


角色ID


ID


Int


PK not null


角色名


RoleName


Varchar(30)


not null

3.用户与角色关联表


用户与角色关联表(User_Role)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


用户ID


UserId


Int


FK not null


角色ID


RoleId


Int


FK not null

4.用户组表


用户组表(UserGroup)


字段名称


字段


类型


备注


用户组ID


ID


Int


PK not null


用户组名


UserGroupName


Varchar(30)


not null

5.用户组与用户信息关联表


用户组与用户信息关联表(UserGroup_UserInfo)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


用户组ID


UserGroupId


Int


FK not null


用户ID


UserId


Int


FK not null

6.用户组与角色关联表


用户组与角色关联表(UserGroup_Role)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


用户组ID


UserGroupId


Int


FK not null


角色ID


RoleId


Int


FK not null

7.菜单表


菜单表(Menu)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


菜单名称


MenuName


Varchar(30)


not null


菜单URL


MenuUrl


Varchar(100)


菜单父ID


ParentId


Int

8.页面元素表


页面元素表(PageElement)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


页面元素名称


PageElementName


Varchar(100)


not null

9.文件表


文件表(File)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


文件名称


FileName


Varchar(50)


not null


文件路径


FilePath


Varchar(100)

10.权限表


权限表(Power)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


权限类型


PowerType


Varchar(50)


not null

11.权限与菜单关联表


权限与菜单关联表(Power_Menu)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


权限ID


PowerId


Int


FK not null


菜单ID


MenuId


Int


FK not null

12.权限与页面元素关联表


权限与页面元素关联表(Power_Page)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


权限ID


PowerId


Int


FK not null


页面元素ID


PageId


Int


FK not null

13.权限与文件关联表


权限与文件关联表(Power_File)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


权限ID


PowerId


Int


FK not null


文件ID


FileId


Int


FK not null

14.功能操作表


功能操作表(Operation)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


操作名称


OperationName


Varchar(50)


not null


操作编码


OperationCode


Varchar(50)


拦截URL前缀


Ljurlqz


Varchar(100)


操作父ID


ParentId


Int

15.权限与功能操作关联表


权限与功能操作关联表(Power_Operation)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


权限ID


PowerId


Int


FK not null


操作ID


OperationId


Int


FK not null

16.角色与权限关联表


角色与权限关联表(Role_Power)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


角色ID


RoleId


Int


FK not null


权限ID


PowerId


Int


FK not null

17.操作日志表


操作日志表(OperationLog)


字段名称


字段


类型


备注


ID


ID


Int


PK not null


操作类型Id


OperationTypeId


Int


FK not null


操作内容


OperationContent


Varchar(500)


操作用户ID


OperationUserId


Int


FK not null


操作时间


OperationTime


Date

电子版下载,感谢作者:不哼不哈

原文地址:https://www.cnblogs.com/wjqhuaxia/p/11762242.html

时间: 2024-08-06 06:34:45

权限管理模块设计的相关文章

RBAC用户权限管理数据库设计

http://minjiechenjava.iteye.com/blog/1759482 RBAC用户权限管理数据库设计 博客分类: RBAC 权限设计 RBAC RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用户-角色-权限"的授权模型.在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系.(如下图) 角色是什么?可以理解为一定数

django 自定义user使用权限管理模块

这篇文章主要是讲如何让自定义的user模块也能用到django.contrib.auth中的权限管理模块 看这篇文章之前请先看一下我前边的两篇文章,本文以这两篇文章为基础: django 自定义 USER 用源码告诉你django权限管理是怎么回事 下边是一个大概的实现,后边再做详细分析: 1.user model自定义 class AbstractUser(models.Model): # 登录信息 id = models.AutoField(primary_key=True) staff =

开发框架模块视频系列(4)-- 权限管理模块介绍

权限管理系统主要的功能包括有:用户管理.组织机构管理.功能管理.角色管理和权限分配管理.菜单管理.系统类型管理.登录日志管理.操作日志管理.系统黑白名单管理等功能模块.对于每新增一个系统,我们只需要在权限管理系统中增加一个系统类型定义,以及相关的功能.菜单数据即可,非常方便管理. 权限管理系统,作为一个独立的系统模块,但又可以整合到所有的框架产品和项目中,实现快速的权限管理和控制. 权限的分配和管理,基本上是每个业务系统需要考虑的东西,而这些常用的东西,在整个开发框架中,把它作为一个独立的模块,

权限管理架构设计及实现思路

规划权限管理至少实现菜单权限.界面权限.动作权限(按钮).服务权限. 研究如何实现数据权限等细粒度权限. (1)系统菜单管理 EF架构~性能高效的批量操作(Insert篇)

OA 办公自动化系统:权限管理模块的实现原理思路

OA系统分有许多的模块,如系统管理模块.等一些比较高级的业务操作.此类业务是不允许让普通员工来操作的,思路如下: 给系统添加角色表,每个用户对应一个角色,每个角色可以拥有多个权限, 如下:创建权限表(PRIVILEGE): 该表定义了权限操作的名称以及可操作的action路径,权限还定义了其下的二级子权限. 通过表中列的设计大致可以看出我前台关于对应权限操作的标签应是从该表中的NAME列来进行取值(进一步动态渲染成用户可以看到的标签来)的. 创建值为与角色相关联的表(sys_position_p

OA项目15:权限管理实体设计及映射

首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明.谢谢. 一 实体设计: 1.权限实体设计: 1)属性设计: 主键:id 关联属性:Set<Role> roles,Set<Privilege> privileges,Privilege parent,Set<Privilege> children 一般属性:name,url 特殊属性:暂无 2)涉及到3个实体:User(用户),Role(

实战3--设计管理模块, 设计实体类和表

1. 设计实体类/表 2. 分析有几个功能, 对应几个请求 3. 实现功能 1. 写action 2. 写service 3. 写Dao 4. 写jsp 1. 先设计岗位类Role 建实体类--> hbm.xml-->建表  (创建sessionFactory) package cn.itcast.oa.domain; public class Role { private Long id; private String name; private String description; pu

通用权限管理设计

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

系统权限管理设计 (转)

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