建设外贸购物网站,海外推广公司,重庆网站公司设计,中山网站建设网站写在最前
如果这个项目让你有所收获#xff0c;记得 Star 关注哦#xff0c;这对我是非常不错的鼓励与支持。
源码地址#xff08;后端#xff09;#xff1a;https://gitee.com/csps/mingyue
源码地址#xff08;前端#xff09;#xff1a;https://gitee.com/csps…写在最前
如果这个项目让你有所收获记得 Star 关注哦这对我是非常不错的鼓励与支持。
源码地址后端https://gitee.com/csps/mingyue
源码地址前端https://gitee.com/csps/mingyue-ui
文档地址https://gitee.com/csps/mingyue/wikis
数据库权限模型设计
设计思路通过用户关联角色一个用户可关联多个角色角色关联菜单一个角色可关联多个菜单完成用户权限控制。 用户 1 角色 N角色 1 菜单权限点N sys_user 用户表
sys_user_role 用户角色关系表
sys_role 角色表
sys_role_menu 角色菜单关系表
sys_menu 菜单表用户表
用户表在之前的开发中已经设计并使用了
CREATE TABLE sys_user (user_id BIGINT(20) NOT NULL COMMENT 用户ID,username VARCHAR(64) NOT NULL COMMENT 用户名,nickname VARCHAR(64) NOT NULL COMMENT 用户昵称,sex CHAR(1) DEFAULT 0 COMMENT 用户性别0男 1女 2未知,password VARCHAR(255) NOT NULL COMMENT 密码,phone VARCHAR(32) DEFAULT NULL COMMENT 手机号码,email VARCHAR(32) DEFAULT NULL COMMENT 用户邮箱,avatar VARCHAR(255) DEFAULT NULL COMMENT 头像,status CHAR(1) DEFAULT 0 COMMENT 帐号状态0正常 1停用,is_deleted CHAR(1) DEFAULT 0 COMMENT 删除标志0正常1删除,create_time DATETIME DEFAULT NULL COMMENT 创建时间,update_time DATETIME DEFAULT NULL COMMENT 修改时间,create_by VARCHAR(64) DEFAULT NULL COMMENT 创建者,update_by VARCHAR(64) DEFAULT NULL COMMENT 更新人,PRIMARY KEY (user_id),KEY user_idx1_username (username)
) ENGINE INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT DYNAMIC COMMENT 用户表;BEGIN;
INSERT INTO sys_user VALUES (1, mingyue, 明月, 0, 123456, 13288888888, NULL, NULL, 0, 0, 2023-07-19 17:06:22, 2023-07-19 17:06:25, mingyue, mingyue);
INSERT INTO sys_user VALUES (2, strive, Strive, 0, 123456, 15388888888, NULL, NULL, 0, 0, 2023-07-19 17:06:22, 2023-07-19 17:06:25, mingyue, mingyue);
COMMIT;角色表
CREATE TABLE sys_role (role_id BIGINT(20) NOT NULL COMMENT 角色ID,role_name VARCHAR(64) NOT NULL COMMENT 角色名称,role_code VARCHAR(64) NOT NULL COMMENT 角色代码,order_num INT(4) NOT NULL COMMENT 显示顺序,status CHAR(1) DEFAULT 0 COMMENT 角色状态0正常 1停用,role_desc VARCHAR(255) DEFAULT NULL COMMENT 角色描述,is_deleted CHAR(1) DEFAULT 0 COMMENT 删除标志0正常1删除,create_time DATETIME DEFAULT NULL COMMENT 创建时间,update_time DATETIME DEFAULT NULL COMMENT 修改时间,create_by VARCHAR(64) DEFAULT NULL COMMENT 创建者,update_by VARCHAR(64) DEFAULT NULL COMMENT 更新人,PRIMARY KEY (role_id),UNIQUE KEY role_idx1_role_code (role_code)
) ENGINE INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT DYNAMIC COMMENT 角色表;BEGIN;
INSERT INTO sys_role VALUES (1, 超级管理员, admin, 0, 0, NULL, 0, 2023-07-19 17:06:22, 2023-07-19 17:06:25, mingyue, mingyue);
INSERT INTO sys_role VALUES (2, 普通用户, common, 1, 0, NULL, 0, 2023-07-19 17:06:22, 2023-07-19 17:06:25, mingyue, mingyue);
COMMIT;用户角色关系表
管理用户与角色之间关系用户 1 角色 N
DROP TABLE IF EXISTS sys_user_role;
CREATE TABLE sys_user_role (user_id BIGINT(20) NOT NULL COMMENT 用户ID,role_id BIGINT(20) NOT NULL COMMENT 角色ID,PRIMARY KEY (user_id, role_id)
) ENGINE INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT DYNAMIC COMMENT 用户和角色关联表;BEGIN;
INSERT INTO sys_user_role VALUES (1, 1);
INSERT INTO sys_user_role VALUES (2, 2);
COMMIT;菜单表
菜单表的设计参考前端项目 JSON 数据设计
{// 菜单路径用于跳转path: /home,// 菜单 name用于界面 keep-alive 路由缓存。// 此 name 需要与 component 组件中的 name 值相同唯一name: home,// 组件路径component: () import(//views/home/index.vue),// 菜单重定向路径redirect: /home,// 附加自定义数据meta: {// 菜单标题国际化写法title: message.router.home,// 菜单外链链接// 开启外链条件1、isLink: true 2、链接地址不为空meta.isLink 3、isIframe: falseisLink: ,// 菜单是否隐藏菜单不显示在界面但可以进行跳转isHide: false,// 菜单是否缓存isKeepAlive: true,// 菜单是否固定固定在 tagsView 中不可进行关闭右键菜单无 关闭 项isAffix: true,// 是否内嵌// 开启条件1、isIframe: true 2、链接地址不为空meta.isLinkisIframe: false,// 当前路由权限标识取角色管理。控制路由显示、隐藏。超级管理员admin 普通角色common// 之前 auth 取用户角色下有多个用户roles: [admin, common],// 菜单图标icon: iconfont icon-shouye,// 自行再添加...},
}CREATE TABLE sys_menu (menu_id BIGINT(20) NOT NULL COMMENT 菜单名称,menu_name VARCHAR(32) NOT NULL COMMENT 菜单名称,parent_id BIGINT(20) DEFAULT NULL COMMENT 父菜单ID,permission VARCHAR(32) DEFAULT NULL COMMENT 权限标识,type CHAR(1) DEFAULT NULL COMMENT 菜单类型0菜单 1按钮,order_num INT(4) NOT NULL DEFAULT 0 COMMENT 排序值,path VARCHAR(128) DEFAULT NULL COMMENT 路由地址前端URL),component VARCHAR(255) DEFAULT null COMMENT 组件路径,redirect VARCHAR(255) DEFAULT null COMMENT 重定向路径,is_link CHAR(1) DEFAULT 0 COMMENT 是否为外链0否 1是,is_hide CHAR(1) DEFAULT 0 COMMENT 是否隐藏0否 1是,is_keep_alive CHAR(1) DEFAULT 0 COMMENT 是否开启缓存0否 1是,is_affix CHAR(1) DEFAULT 0 COMMENT 是否固定0否 1是,is_iframe CHAR(1) DEFAULT 0 COMMENT 是否内嵌0否 1是,status CHAR(1) DEFAULT 0 COMMENT 菜单状态0正常 1停用,icon VARCHAR(64) DEFAULT NULL COMMENT 图标,is_deleted CHAR(1) DEFAULT 0 COMMENT 删除标志0正常1删除,create_time DATETIME DEFAULT NULL COMMENT 创建时间,update_time DATETIME DEFAULT NULL COMMENT 修改时间,create_by VARCHAR(64) DEFAULT NULL COMMENT 创建者,update_by VARCHAR(64) DEFAULT NULL COMMENT 更新人,PRIMARY KEY (menu_id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_bin ROW_FORMATDYNAMIC COMMENT菜单权限表;BEGIN;
INSERT INTO sys_menu VALUES (1000, 系统管理, -1, NULL, 0, 0, /system, NULL, NULL, 0, 0, 0, 0, 0, 0, iconfont icon-xitongshezhi, 0, 2023-07-20 17:00:49, 2023-07-20 17:01:09, mingyue, mingyue);
INSERT INTO sys_menu VALUES (1100, 用户管理, 1000, NULL, 0, 0, /system/user, NULL, NULL, 0, 0, 0, 0, 0, 0, iconfont icon-icon-, 0, 2023-07-20 17:00:49, 2023-07-20 17:01:09, mingyue, mingyue);
INSERT INTO sys_menu VALUES (1200, 角色管理, 1000, NULL, 0, 1, /system/role, NULL, NULL, 0, 0, 0, 0, 0, 0, ele-ColdDrink, 0, 2023-07-20 17:00:49, 2023-07-20 17:01:09, mingyue, mingyue);
INSERT INTO sys_menu VALUES (1300, 菜单管理, 1000, NULL, 0, 2, /system/menu, NULL, NULL, 0, 0, 0, 0, 0, 0, iconfont icon-caidan, 0, 2023-07-20 17:00:49, 2023-07-20 17:01:09, mingyue, mingyue);
COMMIT;角色菜单关联表
管理角色与菜单之间关系角色 1 菜单权限点N
DROP TABLE IF EXISTS sys_role_menu;
CREATE TABLE sys_role_menu (role_id BIGINT(20) NOT NULL COMMENT 角色ID,menu_id BIGINT(20) NOT NULL COMMENT 菜单ID,PRIMARY KEY (role_id, menu_id)
) ENGINE INNODB DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT DYNAMIC COMMENT 角色和菜单关联表;BEGIN;
INSERT INTO sys_role_menu VALUES (1, 1000);
INSERT INTO sys_role_menu VALUES (1, 1100);
INSERT INTO sys_role_menu VALUES (1, 1200);
INSERT INTO sys_role_menu VALUES (1, 1300);
INSERT INTO sys_role_menu VALUES (2, 1000);
INSERT INTO sys_role_menu VALUES (2, 1100);
COMMIT;编写关系 SQL
用户与角色
SELECT su.user_id, su.username, su.nickname,sur.role_id,sr.role_name FROM sys_user su
LEFT JOIN sys_user_role sur ON sur.user_id su.user_id
LEFT JOIN sys_role sr ON sr.role_id sur.role_id角色与菜单
SELECT sr.role_id, sr.role_name, sm.menu_id, sm.menu_name FROM sys_role sr
LEFT JOIN sys_role_menu srm ON srm.role_id sr.role_id
LEFT JOIN sys_menu sm ON sm.menu_id srm.menu_id用户与菜单
SELECT su.user_id, su.username, su.nickname,sur.role_id,sr.role_name, sm.menu_id, sm.menu_name FROM sys_user su
LEFT JOIN sys_user_role sur ON sur.user_id su.user_id
LEFT JOIN sys_role sr ON sr.role_id sur.role_id
LEFT JOIN sys_role_menu srm ON srm.role_id sr.role_id
LEFT JOIN sys_menu sm ON sm.menu_id srm.menu_id小结
数据库权限模型设计到此就 OK 啦
接下来把基础代码生成一下对外提供相应接口