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

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

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

大致用到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;
相关文章
|
5月前
|
关系型数据库 MySQL 数据库
关系型数据库MySQL开发要点之多表设计案例详解代码实现
关系型数据库MySQL开发要点之多表设计案例详解代码实现
62 2
|
6月前
|
存储 SQL 关系型数据库
数据库设计的基本原则和主要步骤以及应注意什么?
数据库设计的基本原则和主要步骤以及应注意什么?
399 0
|
6月前
|
安全 Java 数据库
设计一个简单的权限系统
在Java中构建简单权限系统涉及定义Role和Permission实体,创建User实体关联角色,设计权限分配机制,实现权限检查方法及界面交互。示例代码包括实体类、权限分配服务、安全服务和主函数。实际应用可能需要更复杂的权限控制、动态管理、数据库集成和用户界面。Spring Security等框架可提供全面的安全管理解决方案。【5月更文挑战第3天】
|
存储 缓存 关系型数据库
对于当代数据库的设计原则还需要关联吗?
对于当代数据库的设计原则还需要关联吗?
89 0
|
消息中间件 JSON 安全
如何设计权限系统?
如何设计权限系统?
|
存储 数据库 数据安全/隐私保护
权限管理-表结构和关系 | 学习笔记
快速学习 权限管理-表结构和关系
141 0
权限管理-表结构和关系 | 学习笔记
【自然框架】之通用权限(三):组织结构表组
      继续,这是第三章了。拖得有点长,但是我也是一边写,一边在想办法,想怎么做才能让资源权限也能通用起来。看大家的回复也给了我一些提示,我也在修改我的方案。原来打算用来解决一个人虽然在业务一部,但是却可以看业务一部、业务二部的客户信息的情况,但是仔细想了一下,这么做也不行。
860 0
|
数据库
通用权限的思路。带有数据库关系图
写完了就要提交了,想向上传一个图片,IE居然死掉了,白写了,还得重来一遍。郁闷。     上篇:通用权限的思路。只是一个简单的思路。       上一篇住要是想说一下大体的思路,就是一个主要的框架,我觉得在做一件事情之前,都需要有一个初略的设计,就是中提的想法,抓住问题的关键点。
1061 0
|
数据库
【自然框架】之通用权限:数据库设计的几种使用方式
      上次《【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图 》里说了一大堆的表,好多人说太复杂了,做到权限到模块就可以了。       这个嘛,我也没有说所有的表都要一起使用呀。
1208 0
|
数据库
【自然框架】之通用权限:用PowerDesigner重新设计了一下数据库,有ER图和表关系图
好像以前做的那个数据库设计大家都没太看懂,究其原因似乎大家都比较习惯使用PowerDesinger来设计。而我用Excel画出来的图大家看着特别别扭,而且还没有总体的图,也没有ER图,所以大家也就没有心情看了吧。
1657 0