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

简介: 经典权限系统设计(五张表)

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

大致用到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

最关键的地方是,某个用户登录时,如何查找该用户的菜单权限?其实一条语句即可搞定:

假如用户的用户名为zhangsan,则他的菜单权限查询如下:

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 = 'zhangsan'

权限管理系统经典的五张表

DESC t_user
DESC t_role
DESC t_menu
DESC t_userrole

DROP TABLE IF EXISTS t_user;
DROP TABLE IF EXISTS t_role;
DROP TABLE IF EXISTS t_menu;
DROP TABLE IF EXISTS t_userrole;

CREATE TABLE t_user(
usr_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
usr_account VARCHAR(32) NOT NULL UNIQUE COMMENT '账号',
usr_password CHAR(32) NOT NULL COMMENT '密码'
)COMMENT '用户表';

CREATE TABLE t_role(
ro_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
ro_name VARCHAR(32) NOT NULL UNIQUE COMMENT '角色名'
)COMMENT '角色表';

CREATE TABLE t_menu(
mu_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 'ID',
mu_name VARCHAR(32) NOT NULL UNIQUE COMMENT '菜名'
)COMMENT '菜单表';

CREATE TABLE t_userrole(
ur_usr_id INT COMMENT '用户ID',
ur_ro_id INT COMMENT '角色ID'
)COMMENT '用户角色表';

CREATE TABLE t_rolemenu(
rm_ro_id INT COMMENT '角色ID',
rm_mu_id INT COMMENT '菜单ID',
PRIMARY KEY(rm_ro_id,rm_mu_id),
FOREIGN KEY(rm_ro_id) REFERENCES t_role(ro_id),
FOREIGN KEY(rm_mu_id) REFERENCES t_menu(mu_id)
)COMMENT '角色菜单表';

INSERT INTO t_user(usr_account,usr_password) VALUES('chenxueli','111'); -- SYS
INSERT INTO t_user(usr_account,usr_password) VALUES('chensheng','222'); -- SYSTEM
INSERT INTO t_user(usr_account,usr_password) VALUES('zsf','333'); -- ADMIN
INSERT INTO t_user(usr_account,usr_password) VALUES('zs','444'); -- USER

INSERT INTO t_role(ro_name) VALUES('SYS');
INSERT INTO t_role(ro_name) VALUES('SYSTEM');
INSERT INTO t_role(ro_name) VALUES('ADMIN');
INSERT INTO t_role(ro_name) VALUES('USER');

INSERT INTO t_menu(mu_name) VALUES('拉黑用户');-- SYS
INSERT INTO t_menu(mu_name) VALUES('运费险');-- SYS SYSTEM
INSERT INTO t_menu(mu_name) VALUES('上架');-- SYS SYSTEM ADMIN
INSERT INTO t_menu(mu_name) VALUES('下架');-- SYS SYSTEM ADMIN
INSERT INTO t_menu(mu_name) VALUES('下单');-- USER
INSERT INTO t_menu(mu_name) VALUES('付款');-- USER

INSERT INTO t_userrole VALUES(1,1),(1,2);
INSERT INTO t_userrole VALUES(2,2);
INSERT INTO t_userrole VALUES(3,3);
INSERT INTO t_userrole VALUES(4,4);

INSERT INTO t_rolemenu VALUES(1,1),(1,2);
INSERT INTO t_rolemenu VALUES(2,2),(2,3)(2,4);
INSERT INTO t_rolemenu VALUES(3,3),(3,4);
INSERT INTO t_rolemenu VALUES(4,5),(4,6);

SELECT * FROM t_rolemenu ORDER BY ro_id;
相关文章
|
7天前
|
关系型数据库 MySQL 数据库
关系型数据库MySQL开发要点之多表设计案例详解代码实现
关系型数据库MySQL开发要点之多表设计案例详解代码实现
19 2
|
2月前
|
安全 Java 数据库
设计一个简单的权限系统
在Java中构建简单权限系统涉及定义Role和Permission实体,创建User实体关联角色,设计权限分配机制,实现权限检查方法及界面交互。示例代码包括实体类、权限分配服务、安全服务和主函数。实际应用可能需要更复杂的权限控制、动态管理、数据库集成和用户界面。Spring Security等框架可提供全面的安全管理解决方案。【5月更文挑战第3天】
|
10月前
|
存储 缓存 关系型数据库
对于当代数据库的设计原则还需要关联吗?
对于当代数据库的设计原则还需要关联吗?
69 0
|
消息中间件 JSON 安全
如何设计权限系统?
如何设计权限系统?
|
存储 API 数据安全/隐私保护
权限系统的基本概念和架构
权限系统的基本概念和架构
权限系统的基本概念和架构
|
数据库
【自然框架】之通用权限:数据库设计的几种使用方式
      上次《【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图 》里说了一大堆的表,好多人说太复杂了,做到权限到模块就可以了。       这个嘛,我也没有说所有的表都要一起使用呀。
1196 0
|
SQL
【自然框架】之通用权限(四):角色表组
      继续,这是第四章了。这里涉及到了资源方面的,不过有点绕,所以这里先介绍一下表结构,在后面的章节里面,再举例子详细介绍。 通用权限想要写的文章目录:(这是第四章)   1、 简介、数据库的总体结构2、 介绍人员表组3、 介绍组织结构表组4、 介绍角色表组5、 介绍“项目自我描...
854 0
|
搜索推荐 数据库
【自然框架】之通用权限(五):项目描述表组
      继续,这是第五章了。我发现了,写文章比写程序还要有难度。   通用权限想要写的文章目录:(这是第五章)    1、 简介、数据库的总体结构2、 介绍人员表组3、 介绍组织结构表组4、 介绍角色表组5、 介绍“项目自我描述表组”6、 权限到节点7、 权限到按钮8、 权限到列...
1099 0
【自然框架】之通用权限(三):组织结构表组
      继续,这是第三章了。拖得有点长,但是我也是一边写,一边在想办法,想怎么做才能让资源权限也能通用起来。看大家的回复也给了我一些提示,我也在修改我的方案。原来打算用来解决一个人虽然在业务一部,但是却可以看业务一部、业务二部的客户信息的情况,但是仔细想了一下,这么做也不行。
842 0
|
数据库
【自然框架】之通用权限(二):人员表组
      继续,这是第二章了。本来想在这一章里面介绍三个表组来着,但是我有点写不好的感觉,还是多分几章吧,这一章就只介绍人员表组。第二章到第五章主要是介绍表结构。我是习惯使用Excel来设计表,一开始的时候只能记录表名、字段名、字段类型、字段说明等信息,但是一直没能找到如何使用Excel来体现出来表之间的关系。
1092 0