设计基础:

  用户、角色、权限三大核心表,加上用户角色、角色权限两个映射表(用于给用户表联系上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。

  大致用到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)
  添加数据如
insert into popedom values(‘我的办公桌’,0,’’)
insert into popedom values(‘电子邮箱’,1,’…/mail/EmaiolManage.aspx’)
(添加数据的原则是一级接点的popedomfatherid 为0,如果是(我的办公桌)下面的接点,它们的popedomfatherid为(我的办公桌)的主键)

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) --主键

6.五表之间的关联

转载于:https://www.cnblogs.com/java-123/p/10568404.html

关于权限五张表的独到见解相关推荐

  1. 闻风丧胆系统角色权限五张表的设计

    众所周知,权限系统是每个系统里面必备的最基本的系统,然而权限系统设计有时挺麻烦的,,现在整理了下,给正在开发此模块的朋友一个思路! 设计基础:用户.角色.权限三大核心表,加上用户角色.角色权限两个映射 ...

  2. 经典权限系统设计(五张表)

    经典权限系统设计(五张表) 大致用到5张表:用户表(UserInfo).角色表(RoleInfo).菜单表(MenuInfo).用户角色表(UserRole).角色菜单表(RoleMenu). 各表的 ...

  3. ASP.NET-权限管理五张表

    ASP.NET 权限管理五张表 权限管理的表(5张表) 每个表里面必有的一些信息 序号 名称  字段  类型   主键 默认值 是否为空 备注 1  用户ID  ID      INT     是   ...

  4. RBAC经典角色权限系统设计五张表及拓展应用

    大家都知道,权限系统是每个系统里面必备的最基本的系统,然而权限系统设计有时挺麻烦的,现在整理了下,给正在开发此模块的朋友提供一个思路! 设计基础:用户.角色.权限三大核心表,加上用户角色.角色权限两个 ...

  5. rbac权限管理5张表_PHP之常用的RBAC权限管理详解

    文章正文 在说权限管理前,应该先知道权限管理要有哪些功能: (1).用户只能访问,指定的控制器,指定的方法 (2).用户可以存在于多个用户组里 (3).用户组可以选择,指定的控制器,指定的方法 (4) ...

  6. 权限管理需要哪几张表

    权限管理的五张表 一.五张表 1.用户表 user 2.角色表 role 3.权限表也叫资源表 permission 4.用户角色表 user_role_relation 5.角色权限表 role_p ...

  7. 工作流管理系统开发之十二 同一张表单在流程多节点中流转的权限控件

    以前写过一篇  表单权限与流程的权限控制:文章,没有具体的去实现,实践证明,同一张表单在多流程节点中流转,是工作流和电子表单必须要处理的问题. 工作流系统和电子表单相结合,达到同一张表单在流程的各个节 ...

  8. php中rbac三张表的关系,thinkPHP的RBAC权限管理

    thinkPHP的RBAC权限管理 如何进行thinkPHP的rbac权限管理呢?下面是由百分网小编为大家整理的thinkPHP的RBAC权限管理,喜欢的可以收藏一下!了解更多详情资讯,请关注应届毕业 ...

  9. mysql 表字段信息从一张表迁移到另一张表_MySQL(数据库)笔记

    ###数据库 之前通过流去操作文件保存数据库的弊端: 1.执行效率低 2.开发成本高 3.一般只能保存小量数据 4.只能保存文本数据 ####什么是DB - DataBase 数据库:代表文件集合 # ...

最新文章

  1. strchr strstr函数php,PHP字符串函数之 strstr stristr strchr strrchr
  2. java socket channel_Java NIO 教程(八) SocketChannel
  3. Python模块与类
  4. Reddit如何使用Memcached来存储3TB的缓存数据--转
  5. Codeforces Round #425 D
  6. 博客地址 RSS地址
  7. hive 如何将数组转成字符串_hive详细笔记(八)-Hive之列转行和行转列(附带讲解视频 )...
  8. php 什么时候使用单例,php什么时候使用单例模式
  9. Jsoup爬虫新手一
  10. 记于开学两个星期...十九岁快乐!
  11. u8服务器配置维护,u8客户端连接服务器配置
  12. Go语言Web开发Revel框架搭建
  13. 最新版本飞信协议抓包
  14. 栈帧及EBP、ESP寄存器及出入栈的流程
  15. RabbitMQ(6)-Spring AMQP,Spring集成RabbitMQ
  16. opencv——批量修改图片像素大小
  17. OpenCV图像阈值
  18. 【网络技术题库梳理8】网络系统结构与设计的基本原则
  19. android监控电话录音,Android例子源码实现电话录音监听的安卓例子
  20. Notes Fifth Day-渗透攻击-红队-信息收集

热门文章

  1. MS SQL入门基础:创建索引
  2. python操作Elasticsearch7.17.0
  3. python鼠标键盘操作 PyUserInput
  4. Windows10 将 YOLOX模型转换为OpenVINO需要的IR文件
  5. Nodejs Web网站-请求路径分发
  6. SpringBoot和SpringSecurity整合,未登录请求自定义controller访问前端页面,出现 302状态码,一直在登录页面重定向
  7. 【十大经典排序算法】java实现--插入排序(3)
  8. DS博客作业08--课程总结
  9. 设计模式——10.单例模式
  10. panda 函数-处理空值