-
Notifications
You must be signed in to change notification settings - Fork 97
Expand file tree
/
Copy pathmanager.sql
More file actions
208 lines (162 loc) · 6.9 KB
/
manager.sql
File metadata and controls
208 lines (162 loc) · 6.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
-- 后台管理相关sql语句
-- 创建菜单表
DROP TABLE IF EXISTS menu;
CREATE TABLE IF NOT EXISTS menu(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
`name` VARCHAR(32) NOT NULL COMMENT '菜单名称',
url VARCHAR(500) COMMENT '网址',
icon VARCHAR(20) COMMENT '显示的图标',
menutype ENUM('0','1','2') NOT NULL DEFAULT '0' COMMENT '类型,0 菜单,1 连接网址,2 隐藏连接',
display INT NOT NULL DEFAULT 1 COMMENT '显示排序',
parentid INT NOT NULL DEFAULT 0 COMMENT '父级的id,引用本表id字段',
creator INT NOT NULL DEFAULT 0 COMMENT '创建者id,0为超级管理员',
createtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updateuser INT COMMENT '更新者id',
updatetime TIMESTAMP NULL COMMENT '更新时间',
flag ENUM('0','1') NOT NULL DEFAULT '1' COMMENT '是否启用,0 禁用,1启用'
)ENGINE=InnoDB;
-- 后台管理用户表
DROP TABLE IF EXISTS admin_user;
CREATE TABLE IF NOT EXISTS admin_user(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '用户表主键',
tenantid INT NOT NULL COMMENT '租户id,0为系统用户',
name VARCHAR(20) NOT NULL COMMENT '用户名',
psw VARCHAR(32) NOT NULL COMMENT '用户密码MD5加密',
email VARCHAR(32) NOT NULL COMMENT '用户邮箱',
creator INT NOT NULL COMMENT '创建人,0为初始化',
createtime TIMESTAMP NOT NULL COMMENT '创建时间',
flag INT(1) NOT NULL DEFAULT 1 COMMENT '用户状态,1启用,0禁用',
logintime TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '最后登录时间',
updateuser INT COMMENT '更新者id',
updatetime TIMESTAMP NULL COMMENT '更新时间'
)ENGINE=InnoDB;
-- 租户表
DROP TABLE IF EXISTS tenant;
CREATE TABLE IF NOT EXISTS tenant(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '租户主键id',
tenantname VARCHAR(32) NOT NULL COMMENT '租户名称',
account VARCHAR(32) NOT NULL COMMENT '租户联系人',
phone VARCHAR(12) NOT NULL COMMENT '租户手机号',
begintime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '租户有效期开始时间',
endtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '租户有效期结束时间',
flag INT NOT NULL DEFAULT 1 COMMENT '租户状态,0 未启用 1 启用 与时间共同控制&&'
);
-- 创建角色表
DROP TABLE IF EXISTS role;
CREATE TABLE IF NOT EXISTS role(
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '角色表主键',
name VARCHAR(20) NOT NULL COMMENT '角色名称',
createtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
creator INT DEFAULT 0 COMMENT '用户id,0为角色,有关联时则为用户的单独权限',
description VARCHAR(200) COMMENT '角色描述',
updateuser INT COMMENT '更新者id',
updatetime TIMESTAMP NULL COMMENT '更新时间'
)ENGINE=InnoDB;
-- 创建用户与角色关联表
DROP TABLE IF EXISTS user_role;
CREATE TABLE IF NOT EXISTS user_role(
userid INT NOT NULL COMMENT '用户id',
roleid INT NOT NULL COMMENT '角色id',
creator INT NOT NULL COMMENT '创建人,0为初始化',
createtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
)ENGINE=InnoDB;
ALTER TABLE user_role add constraint PK01_user_role primary key (userid,roleid);
-- 创建角色与菜单(资源的关联表)
DROP TABLE IF EXISTS role_menu;
CREATE TABLE IF NOT EXISTS role_menu(
roleid INT NOT NULL COMMENT '角色id',
menuid INT NOT NULL COMMENT '菜单id',
flag INT(1) NOT NULL DEFAULT 1 COMMENT '1为有权限,0为没有权限(防止以后会出现角色有权限但是个人没有权限的情况)',
creator INT NOT NULL COMMENT '创建人,0为初始化',
createtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'
)ENGINE=InnoDB;
ALTER TABLE role_menu add constraint PK01_role_menu primary key (menuid,roleid);
-- 计算传入字符串的总length
DELIMITER $$
DROP function IF EXISTS `func_split_TotalLength` $$
CREATE FUNCTION `func_split_TotalLength`
(f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11)
BEGIN
return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
END$$
DELIMITER;
-- 拆分传入的字符串,返回拆分后的新字符串
DELIMITER $$
DROP function IF EXISTS `func_split` $$
CREATE FUNCTION `func_split`
(f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGIN
declare result varchar(255) default '';
set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
return result;
END$$
DELIMITER;
-- 更新角色权限的存储过程
delimiter $$
DROP PROCEDURE IF EXISTS `role_menu_update` ;
CREATE PROCEDURE `role_menu_update`
(IN menuids varchar(3000),IN i_roleid INT,IN userid INT)
BEGIN
-- 拆分结果
DECLARE cnt INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
SET cnt = func_split_TotalLength(menuids,',');
DELETE FROM role_menu WHERE roleid = i_roleid;
WHILE i < cnt
DO
SET i = i + 1;
INSERT INTO role_menu(roleid,menuid,creator) VALUES (i_roleid,func_split(menuids,',',i),userid);
END WHILE;
END $$
-- 更新用户角色信息
delimiter $$
DROP PROCEDURE IF EXISTS `user_role_update` ;
CREATE PROCEDURE `user_role_update`
(IN roleids varchar(3000),IN i_userid INT,IN i_creator INT)
BEGIN
-- 拆分结果
DECLARE cnt INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
SET cnt = func_split_TotalLength(roleids,',');
DELETE FROM user_role WHERE userid = i_userid;
WHILE i < cnt
DO
SET i = i + 1;
INSERT INTO user_role(userid,roleid,creator) VALUES (i_userid,func_split(roleids,',',i),i_creator);
END WHILE;
END $$
-- 删除菜单的存储过程
DROP PROCEDURE IF EXISTS `delete_menu`;
CREATE PROCEDURE `delete_menu`(IN `menuid` int)
BEGIN
DECLARE rowNUM INT DEFAULT 0;
create temporary table if not exists menu_del_temp -- 不存在则创建临时表
(
id INT
);
create temporary table if not exists menu_del_temp2 -- 不存在则创建临时表
(
id INT
);
create temporary table if not exists menu_del_temp3 -- 不存在则创建临时表
(
id INT
);
TRUNCATE TABLE menu_del_temp2;
TRUNCATE TABLE menu_del_temp; -- 清空临时表
INSERT INTO menu_del_temp SELECT id FROM menu where parentid=menuid;
-- DELETE FROM category WHERE ID IN (SELECT id FROM category_del_temp);
INSERT INTO menu_del_temp2 SELECT id FROM menu where parentid IN (SELECT id FROM menu_del_temp);
SELECT COUNT(id) INTO rowNUM FROM menu_del_temp2;
WHILE rowNUM > 0 DO
INSERT INTO menu_del_temp SELECT id FROM menu_del_temp2;
TRUNCATE TABLE menu_del_temp3;
INSERT INTO menu_del_temp3 SELECT id FROM menu_del_temp2;
TRUNCATE TABLE menu_del_temp2;
INSERT INTO menu_del_temp2 SELECT id FROM menu where parentid IN (SELECT id FROM menu_del_temp3);
SELECT COUNT(id) INTO rowNUM FROM menu_del_temp2;
END WHILE;
INSERT INTO menu_del_temp(id) values(menuid);
DELETE FROM menu WHERE id IN (SELECT id FROM menu_del_temp);
DELETE FROM role_menu WHERE menuid IN (SELECT id FROM menu_del_temp);
END;