闻风丧胆系统角色权限五张表的设计
来源:互联网 发布:韩国sns是什么软件 编辑:程序博客网 时间:2024/06/05 06:05
众所周知,权限系统是每个系统里面必备的最基本的系统,然而权限系统设计有时挺麻烦的,,现在整理了下,给正在开发此模块的朋友一个思路!
设计基础:用户、角色、权限三大核心表,加上用户角色、角色权限两个映射表(用于给用户表联系上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。
大致用到5张表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)、用户角色表(UserRole)、角色菜单表(RoleMenu)。
各表的大体表结构如下:
1、用户表(UserInfo):Id、UserName、UserPwd
2、角色表(RoleInfo):Id、RoleName
3、菜单表(MenuInfo):Id、MenuName
4、用户角色表(UserRole):Id、UserId、RoleId
5、角色菜单表(RoleMenu):Id、RoleId、MenuId
最关键的地方是,某个用户登录时,如何查找该用户的菜单权限?其实一条语句即可搞定:
假如用户的用户名为Arthur,则他的菜单权限查询如下:
Select m.Id,m.MenuName from MenuInfo m ,UserInfo u, UserRole ur, RoleMenu rm Where m.Id = rm.MenuId and ur.RoleId = rm.RoleId and ur.UserId = u.Id and u.UserName = ‘Arthur’
任何权限的需求,都是为广义的用户分配角色,角色拥有广义的权限。角色是最重要的中枢,隐藏做幕后黑手,从不出现在业务代码里,用行话说就是解除了用户和权限的直接耦合。
角色把用户抽象化了,几百个用户变成成几个角色,用户->角色->权限写成通用判断权限的方法:currUser.IsHave(xx权限)。核心就是一个sql联表查询语句,查询条件为用户id。
例如:
部门权限:部门也是一种用户,建立 部门表、部门角色表。通用权限方法里加上 当前部门->部门所属角色->权限
职位权限:职位也是一种用户,建立职位表、职位角色表,同上
菜单:也是一种权限,建立 菜单表、角色菜单表,就把菜单纳入了权限管理。通用权限方法里加上 角色列表->权限、菜单
使用Microsoft SQL Server应用代码构建如下:
1、用户信息表:
create table employee ( userid varchar(50) not null, --用户ID username varchar(100), --用户名 userpassword varchar(100), --密码 ...) alter table employee --主键 add constraint pk_employee_userid primary key (userid)
2、角色表:
create table role ( roleid varchar(50) not null, --角色Id rolename varchar(100), --角色名称 ) alter table tole --主键 add constraint pk_role_roleid primary key (roleid)
3、权限菜单表
create table popedom ( popedomid int identity(1,1) not null, --权限Id popedomname varchar(100), --权限名称 popedomfatherid int, --权限父ID popedomurl varchar(100) --树的连接路径 ...)er table popedom --主键 add constraint PK_popedom primary key (popedomid)
4、用户与角色关系表
create table user_role ( connectionid int identity(1,1) not null, --关系ID userid varchar(50) not null, --管理员表ID roleid varchar(50) not null --角色Id ) alter table user_role --主键 add constraint PK_admin_role primary key(connectionid)
5、角色与权限关系表
create table role_popedom --角色与权限表 ( connectionid int identity(1,1), --关系Id roleid varchar(50) not null, --角色ID popedomid int not null, --权限Id popedom int --权限 (1为可用,2为不可用) ) alter table role_popedom --主键 add constraint PK_role_popedom primary key(connectionid) --主键
- 闻风丧胆系统角色权限五张表的设计
- 基于角色的权限系统设计思想
- 基于角色访问控制的权限系统设计
- 关于系统中权限和角色设计的问题
- 基于角色的权限管理系统数据库设计
- 基于角色访问控制的权限系统设计
- 基于角色的权限管理系统设计思路
- 经典角色权限系统设计五张表及拓展应用
- 基于角色的权限设计
- 基于角色的权限设计
- 基于角色的权限设计
- 基于角色的权限设计
- 基于角色的权限设计
- 基于角色的权限设计
- 基于角色的权限设计
- 基于角色的权限系统
- 【通用权限管理】角色的分类管理,角色-用户组-职位职务-系统角色的设计上的迷惑也解开
- 高级权限管理系统的设计---- 基于角色+模块的权限控制管理实现
- windows上设置自动删除oracle归档日志
- Java 在数据库中生成一年的假日与工作日信息
- 谱聚类(spectral clustering)原理+算法流程--总结
- oracle错误编码大全!
- excel中的点文件直接生成polygon文件
- 闻风丧胆系统角色权限五张表的设计
- Java编程的一些经验
- 虚拟机Ubuntu和Windows共享文件设置(二)
- Matlab的线性代数矩阵基础
- css3的背景图片设置的一些问题
- 会话跟踪技术的四种实现方法及特点整理
- UNP笔记-chapter 1
- foreach的使用
- HTTP消息头(HTTP headers)-常用的HTTP请求头与响应头