员工到院转化菜单与权限.sql
14.3 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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
-- =============================================================================
-- 员工到院转化:App 到院登记 + 管理后台到院转化统计
-- 说明:
-- 1. App 菜单挂在 app首页 > 业务操作,沿用 App 菜单的前导斜杠 URL 习惯。
-- 2. 后台菜单挂在 报表中心 > 客户统计。
-- 3. App 菜单授权继承同时拥有 app首页、业务操作的角色;Web 菜单授权继承客户统计角色。
-- 4. 新增角色后,系统不会自动继承本脚本产生的授权,须在授予父菜单时同步重跑本脚本。
-- 5. 菜单、按钮、角色授权均按业务键判断,脚本可重复执行。
-- =============================================================================
SET @AppModuleId = 'member-arrival-app-lq';
SET @WebModuleId = 'member-arrival-web-lq';
SET @AdminRoleId = '94e3a9bb0fce4547886972998fddba1c';
SELECT F_Id INTO @AppParentId
FROM BASE_MODULE
WHERE F_FullName = '业务操作'
AND F_Category = 'App'
AND F_DeleteMark IS NULL
AND F_ParentId IN (
SELECT F_Id
FROM BASE_MODULE
WHERE F_FullName = 'app首页'
AND F_Category = 'App'
AND F_DeleteMark IS NULL
)
LIMIT 1;
SELECT F_Id INTO @WebParentId
FROM BASE_MODULE
WHERE F_FullName = '客户统计'
AND F_Category = 'Web'
AND F_DeleteMark IS NULL
AND F_ParentId IN (
SELECT F_Id
FROM BASE_MODULE
WHERE F_FullName = '报表中心'
AND F_Category = 'Web'
AND F_DeleteMark IS NULL
)
LIMIT 1;
-- App:到院登记
INSERT INTO BASE_MODULE (
F_Id, F_ParentId, F_Type, F_FullName, F_EnCode, F_UrlAddress, F_Icon,
F_SortCode, F_EnabledMark, F_Category, F_DeleteMark, F_LinkTarget,
F_PropertyJson, F_IsButtonAuthorize, F_IsColumnAuthorize, F_IsDataAuthorize,
F_IsFormAuthorize, F_CreatorTime, F_CreatorUserId
)
SELECT
@AppModuleId, @AppParentId, 2, '到院登记', 'memberArrivalApp',
'/pagesA/member-arrival/member-arrival', 'icon-ym icon-ym-generator-steps',
7, 1, 'App', NULL, '_self',
'{"moduleId":"","iconBackgroundColor":"","isTree":0}',
0, 0, 0, 0, NOW(), 'admin'
FROM (SELECT 1) AS seed
WHERE @AppParentId IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM BASE_MODULE
WHERE F_EnCode = 'memberArrivalApp'
AND F_Category = 'App'
AND F_DeleteMark IS NULL
);
SELECT F_Id INTO @ActualAppModuleId
FROM BASE_MODULE
WHERE F_EnCode = 'memberArrivalApp'
AND F_Category = 'App'
AND F_DeleteMark IS NULL
LIMIT 1;
UPDATE BASE_MODULE
SET F_ParentId = @AppParentId,
F_Type = 2,
F_FullName = '到院登记',
F_UrlAddress = '/pagesA/member-arrival/member-arrival',
F_Icon = 'icon-ym icon-ym-generator-steps',
F_SortCode = 7,
F_EnabledMark = 1,
F_LastModifyTime = NOW(),
F_LastModifyUserId = 'admin'
WHERE F_Id = @ActualAppModuleId
AND @AppParentId IS NOT NULL;
-- Web:到院转化统计
INSERT INTO BASE_MODULE (
F_Id, F_ParentId, F_Type, F_FullName, F_EnCode, F_UrlAddress, F_Icon,
F_SortCode, F_EnabledMark, F_Category, F_DeleteMark, F_LinkTarget,
F_PropertyJson, F_IsButtonAuthorize, F_IsColumnAuthorize, F_IsDataAuthorize,
F_IsFormAuthorize, F_CreatorTime, F_CreatorUserId
)
SELECT
@WebModuleId, @WebParentId, 2, '到院转化统计', 'memberArrival',
'permission/member-arrival', 'icon-ym icon-ym-generator-steps',
0, 1, 'Web', NULL, '_self',
'{"moduleId":"","iconBackgroundColor":"","isTree":0}',
1, 0, 1, 0, NOW(), 'admin'
FROM (SELECT 1) AS seed
WHERE @WebParentId IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM BASE_MODULE
WHERE F_EnCode = 'memberArrival'
AND F_Category = 'Web'
AND F_DeleteMark IS NULL
);
SELECT F_Id INTO @ActualWebModuleId
FROM BASE_MODULE
WHERE F_EnCode = 'memberArrival'
AND F_Category = 'Web'
AND F_DeleteMark IS NULL
LIMIT 1;
UPDATE BASE_MODULE
SET F_ParentId = @WebParentId,
F_Type = 2,
F_FullName = '到院转化统计',
F_UrlAddress = 'permission/member-arrival',
F_Icon = 'icon-ym icon-ym-generator-steps',
F_SortCode = 0,
F_EnabledMark = 1,
F_IsButtonAuthorize = 1,
F_IsDataAuthorize = 1,
F_LastModifyTime = NOW(),
F_LastModifyUserId = 'admin'
WHERE F_Id = @ActualWebModuleId
AND @WebParentId IS NOT NULL;
-- 后台按钮权限。仅用于后续 v-hasPermi 精细控制;页面未使用权限指令时不影响现有可用性。
INSERT INTO BASE_MODULEBUTTON (
F_Id, F_ParentId, F_FullName, F_EnCode, F_Icon, F_UrlAddress,
F_PropertyJson, F_Description, F_SortCode, F_EnabledMark,
F_CreatorTime, F_CreatorUserId, F_ModuleId
)
SELECT button_id, '-1', button_name, button_code, button_icon, button_url,
NULL, button_desc, sort_code, 1, NOW(), 'admin', @ActualWebModuleId
FROM (
SELECT 'member-arrival-btn-view-lq' AS button_id, '查看' AS button_name,
'btn_view' AS button_code, 'icon-ym icon-ym-btn-preview' AS button_icon,
NULL AS button_url, '查看到院记录及统计' AS button_desc, 1 AS sort_code
UNION ALL
SELECT 'member-arrival-btn-add-lq', '补录', 'btn_add',
'icon-ym icon-ym-btn-add', NULL, '补录到院登记', 2
UNION ALL
SELECT 'member-arrival-btn-void-lq', '作废', 'btn_cancel',
'icon-ym icon-ym-btn-delete', NULL, '作废到院登记', 3
UNION ALL
SELECT 'member-arrival-btn-export-lq', '导出', 'btn_export',
'icon-ym icon-ym-btn-download', NULL, '导出到院记录', 4
) buttons
WHERE @ActualWebModuleId IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM BASE_MODULEBUTTON b
WHERE b.F_ModuleId = @ActualWebModuleId
AND b.F_EnCode = buttons.button_code
AND b.F_DeleteMark IS NULL
);
-- App 菜单:仅继承同时拥有 app首页和业务操作的有效角色。
-- 不给完全没有 App 父级权限的角色越权新增 App 入口。
INSERT INTO BASE_AUTHORIZE (
F_Id, F_ItemType, F_ItemId, F_ObjectType, F_ObjectId,
F_SortCode, F_CreatorTime, F_CreatorUserId
)
SELECT LEFT(SHA2(CONCAT('member-arrival:app-module:', parent_auth.F_ObjectId), 256), 50),
'module', @ActualAppModuleId, 'Role', parent_auth.F_ObjectId, 1, NOW(), 'admin'
FROM BASE_AUTHORIZE parent_auth
JOIN BASE_ROLE role_info
ON role_info.F_Id = parent_auth.F_ObjectId
AND role_info.F_DeleteMark IS NULL
AND role_info.F_EnabledMark = 1
WHERE @ActualAppModuleId IS NOT NULL
AND parent_auth.F_ItemType = 'module'
AND parent_auth.F_ObjectType = 'Role'
AND parent_auth.F_ItemId = @AppParentId
AND EXISTS (
SELECT 1
FROM BASE_AUTHORIZE root_auth
JOIN BASE_MODULE app_root
ON app_root.F_Id = root_auth.F_ItemId
AND app_root.F_FullName = 'app首页'
AND app_root.F_Category = 'App'
AND app_root.F_DeleteMark IS NULL
WHERE root_auth.F_ItemType = 'module'
AND root_auth.F_ObjectType = 'Role'
AND root_auth.F_ObjectId = parent_auth.F_ObjectId
)
AND NOT EXISTS (
SELECT 1
FROM BASE_AUTHORIZE a
WHERE a.F_ItemType = 'module'
AND a.F_ItemId = @ActualAppModuleId
AND a.F_ObjectType = 'Role'
AND a.F_ObjectId = parent_auth.F_ObjectId
);
-- Web 菜单:继承客户统计父菜单的全部有效角色。
INSERT INTO BASE_AUTHORIZE (
F_Id, F_ItemType, F_ItemId, F_ObjectType, F_ObjectId,
F_SortCode, F_CreatorTime, F_CreatorUserId
)
SELECT LEFT(SHA2(CONCAT('member-arrival:web-module:', parent_auth.F_ObjectId), 256), 50),
'module', @ActualWebModuleId, 'Role', parent_auth.F_ObjectId, 1, NOW(), 'admin'
FROM BASE_AUTHORIZE parent_auth
JOIN BASE_ROLE role_info
ON role_info.F_Id = parent_auth.F_ObjectId
AND role_info.F_DeleteMark IS NULL
AND role_info.F_EnabledMark = 1
WHERE @ActualWebModuleId IS NOT NULL
AND parent_auth.F_ItemType = 'module'
AND parent_auth.F_ObjectType = 'Role'
AND parent_auth.F_ItemId = @WebParentId
AND NOT EXISTS (
SELECT 1
FROM BASE_AUTHORIZE a
WHERE a.F_ItemType = 'module'
AND a.F_ItemId = @ActualWebModuleId
AND a.F_ObjectType = 'Role'
AND a.F_ObjectId = parent_auth.F_ObjectId
);
-- 查看:所有拥有到院转化统计页面的角色均可查看。
INSERT INTO BASE_AUTHORIZE (
F_Id, F_ItemType, F_ItemId, F_ObjectType, F_ObjectId,
F_SortCode, F_CreatorTime, F_CreatorUserId
)
SELECT LEFT(SHA2(CONCAT('member-arrival:view:', page_auth.F_ObjectId), 256), 50),
'button', b.F_Id, 'Role', page_auth.F_ObjectId, b.F_SortCode, NOW(), 'admin'
FROM BASE_MODULEBUTTON b
JOIN BASE_AUTHORIZE page_auth
ON page_auth.F_ItemType = 'module'
AND page_auth.F_ItemId = @ActualWebModuleId
AND page_auth.F_ObjectType = 'Role'
WHERE b.F_ModuleId = @ActualWebModuleId
AND b.F_DeleteMark IS NULL
AND b.F_EnCode = 'btn_view'
AND NOT EXISTS (
SELECT 1
FROM BASE_AUTHORIZE a
WHERE a.F_ItemType = 'button'
AND a.F_ItemId = b.F_Id
AND a.F_ObjectType = 'Role'
AND a.F_ObjectId = page_auth.F_ObjectId
);
-- 补录:仅继承客户资料管理“新增”权限的页面角色,避免给纯统计只读角色。
INSERT INTO BASE_AUTHORIZE (
F_Id, F_ItemType, F_ItemId, F_ObjectType, F_ObjectId,
F_SortCode, F_CreatorTime, F_CreatorUserId
)
SELECT LEFT(SHA2(CONCAT('member-arrival:add:', page_auth.F_ObjectId), 256), 50),
'button', target_button.F_Id, 'Role', page_auth.F_ObjectId,
target_button.F_SortCode, NOW(), 'admin'
FROM BASE_AUTHORIZE page_auth
JOIN BASE_MODULEBUTTON target_button
ON target_button.F_ModuleId = @ActualWebModuleId
AND target_button.F_EnCode = 'btn_add'
AND target_button.F_DeleteMark IS NULL
WHERE page_auth.F_ItemType = 'module'
AND page_auth.F_ItemId = @ActualWebModuleId
AND page_auth.F_ObjectType = 'Role'
AND EXISTS (
SELECT 1
FROM BASE_AUTHORIZE source_auth
JOIN BASE_MODULEBUTTON source_button
ON source_button.F_Id = source_auth.F_ItemId
AND source_button.F_EnCode = 'btn_add'
AND source_button.F_DeleteMark IS NULL
JOIN BASE_MODULE source_module
ON source_module.F_Id = source_button.F_ModuleId
AND source_module.F_FullName = '客户资料管理'
AND source_module.F_DeleteMark IS NULL
WHERE source_auth.F_ItemType = 'button'
AND source_auth.F_ObjectType = 'Role'
AND source_auth.F_ObjectId = page_auth.F_ObjectId
)
AND NOT EXISTS (
SELECT 1
FROM BASE_AUTHORIZE a
WHERE a.F_ItemType = 'button'
AND a.F_ItemId = target_button.F_Id
AND a.F_ObjectType = 'Role'
AND a.F_ObjectId = page_auth.F_ObjectId
);
-- 导出:仅继承系统中已有导出/下载权限的页面角色(当前数据为管理员、财务部)。
INSERT INTO BASE_AUTHORIZE (
F_Id, F_ItemType, F_ItemId, F_ObjectType, F_ObjectId,
F_SortCode, F_CreatorTime, F_CreatorUserId
)
SELECT LEFT(SHA2(CONCAT('member-arrival:export:', page_auth.F_ObjectId), 256), 50),
'button', target_button.F_Id, 'Role', page_auth.F_ObjectId,
target_button.F_SortCode, NOW(), 'admin'
FROM BASE_AUTHORIZE page_auth
JOIN BASE_MODULEBUTTON target_button
ON target_button.F_ModuleId = @ActualWebModuleId
AND target_button.F_EnCode = 'btn_export'
AND target_button.F_DeleteMark IS NULL
WHERE page_auth.F_ItemType = 'module'
AND page_auth.F_ItemId = @ActualWebModuleId
AND page_auth.F_ObjectType = 'Role'
AND EXISTS (
SELECT 1
FROM BASE_AUTHORIZE source_auth
JOIN BASE_MODULEBUTTON source_button
ON source_button.F_Id = source_auth.F_ItemId
AND source_button.F_DeleteMark IS NULL
AND source_button.F_ModuleId <> @ActualWebModuleId
AND (source_button.F_FullName = '导出' OR source_button.F_EnCode = 'btn_download')
WHERE source_auth.F_ItemType = 'button'
AND source_auth.F_ObjectType = 'Role'
AND source_auth.F_ObjectId = page_auth.F_ObjectId
)
AND NOT EXISTS (
SELECT 1
FROM BASE_AUTHORIZE a
WHERE a.F_ItemType = 'button'
AND a.F_ItemId = target_button.F_Id
AND a.F_ObjectType = 'Role'
AND a.F_ObjectId = page_auth.F_ObjectId
);
-- 作废:仅继承已有其他模块作废权限;若无来源权限则仅管理员兜底。
INSERT INTO BASE_AUTHORIZE (
F_Id, F_ItemType, F_ItemId, F_ObjectType, F_ObjectId,
F_SortCode, F_CreatorTime, F_CreatorUserId
)
SELECT LEFT(SHA2(CONCAT('member-arrival:cancel:', page_auth.F_ObjectId), 256), 50),
'button', target_button.F_Id, 'Role', page_auth.F_ObjectId,
target_button.F_SortCode, NOW(), 'admin'
FROM BASE_AUTHORIZE page_auth
JOIN BASE_MODULEBUTTON target_button
ON target_button.F_ModuleId = @ActualWebModuleId
AND target_button.F_EnCode = 'btn_cancel'
AND target_button.F_DeleteMark IS NULL
WHERE page_auth.F_ItemType = 'module'
AND page_auth.F_ItemId = @ActualWebModuleId
AND page_auth.F_ObjectType = 'Role'
AND EXISTS (
SELECT 1
FROM BASE_AUTHORIZE source_auth
JOIN BASE_MODULEBUTTON source_button
ON source_button.F_Id = source_auth.F_ItemId
AND source_button.F_DeleteMark IS NULL
AND source_button.F_ModuleId <> @ActualWebModuleId
AND (source_button.F_FullName = '作废' OR source_button.F_EnCode = 'btn_cancel')
WHERE source_auth.F_ItemType = 'button'
AND source_auth.F_ObjectType = 'Role'
AND source_auth.F_ObjectId = page_auth.F_ObjectId
)
AND NOT EXISTS (
SELECT 1
FROM BASE_AUTHORIZE a
WHERE a.F_ItemType = 'button'
AND a.F_ItemId = target_button.F_Id
AND a.F_ObjectType = 'Role'
AND a.F_ObjectId = page_auth.F_ObjectId
);
-- 管理员兜底:两个菜单和四个按钮必须完整授权。
INSERT INTO BASE_AUTHORIZE (
F_Id, F_ItemType, F_ItemId, F_ObjectType, F_ObjectId,
F_SortCode, F_CreatorTime, F_CreatorUserId
)
SELECT LEFT(SHA2(CONCAT('member-arrival:admin-module:', module_id), 256), 50),
'module', module_id, 'Role', @AdminRoleId, sort_code, NOW(), 'admin'
FROM (
SELECT @ActualAppModuleId AS module_id, 1 AS sort_code
UNION ALL
SELECT @ActualWebModuleId, 2
) modules
WHERE module_id IS NOT NULL
AND NOT EXISTS (
SELECT 1
FROM BASE_AUTHORIZE a
WHERE a.F_ItemType = 'module'
AND a.F_ItemId = modules.module_id
AND a.F_ObjectType = 'Role'
AND a.F_ObjectId = @AdminRoleId
);
INSERT INTO BASE_AUTHORIZE (
F_Id, F_ItemType, F_ItemId, F_ObjectType, F_ObjectId,
F_SortCode, F_CreatorTime, F_CreatorUserId
)
SELECT LEFT(SHA2(CONCAT('member-arrival:admin-button:', b.F_Id), 256), 50),
'button', b.F_Id, 'Role', @AdminRoleId, b.F_SortCode, NOW(), 'admin'
FROM BASE_MODULEBUTTON b
WHERE b.F_ModuleId = @ActualWebModuleId
AND b.F_DeleteMark IS NULL
AND b.F_EnCode IN ('btn_view', 'btn_add', 'btn_cancel', 'btn_export')
AND NOT EXISTS (
SELECT 1
FROM BASE_AUTHORIZE a
WHERE a.F_ItemType = 'button'
AND a.F_ItemId = b.F_Id
AND a.F_ObjectType = 'Role'
AND a.F_ObjectId = @AdminRoleId
);