Merge branch 'master' of https://git.gex.com.tw/OSAA/Omni_kernel.db
This commit is contained in:
@@ -1,80 +1,84 @@
|
|||||||
DELIMITER //
|
DELIMITER //
|
||||||
|
|
||||||
CREATE PROCEDURE zen_sync_base_security(
|
CREATE OR REPLACE PROCEDURE zen_sync_base_security (
|
||||||
IN p_token VARCHAR(100),
|
IN p_token VARCHAR(100),
|
||||||
IN p_functiontag VARCHAR(100)
|
IN p_functiontag VARCHAR(100)
|
||||||
)
|
)
|
||||||
/*
|
/*
|
||||||
Function : 在單一資料庫的架構下, 在 Wizard 產生程式後, 直接同步 menu 及基本權限設定
|
Function : 在單一資料庫的架構下, 在 Wizard 產生程式後, 直接同步 menu 及基本權限設定
|
||||||
Description: 目的是產生程式後, 就可以直接在測試環境執行
|
Description: 目的是產生程式後, 就可以直接在測試環境執行
|
||||||
Build Date : 2023-12-10
|
Build Date : 2023/08/04
|
||||||
|
|
||||||
Modify History
|
Modify History
|
||||||
Item Who Date Modify Docs
|
Item Who Date Modify Docs
|
||||||
==== ========== ========== ================================================
|
==== ========== ========== ================================================
|
||||||
1 Michael 2023-12-10 改寫為 MySQL 版
|
1 Michael 2026-03-10 Init 重新用 Gemini 改寫(舊版有誤)
|
||||||
|
|
||||||
*/
|
*/
|
||||||
BEGIN
|
BEGIN
|
||||||
DECLARE parenttag VARCHAR(100);
|
-- 變數宣告必須放在最前面
|
||||||
DECLARE cnt INT;
|
DECLARE v_parenttag VARCHAR(100);
|
||||||
DECLARE user_id VARCHAR(100);
|
DECLARE v_cnt INT;
|
||||||
DECLARE err_code SMALLINT;
|
DECLARE v_userid VARCHAR(100);
|
||||||
DECLARE err_msg NVARCHAR(100);
|
DECLARE v_err_code SMALLINT DEFAULT 0;
|
||||||
|
DECLARE v_err_msg NVARCHAR(100) DEFAULT '選單及權限設定成功 !!';
|
||||||
|
|
||||||
SET err_code = 0;
|
-- Step 1: 驗證使用者身份 [cite: 2]
|
||||||
SET err_msg = '選單及權限設定成功 !!';
|
SELECT userid INTO v_userid FROM sys_users WHERE token = p_token LIMIT 1;
|
||||||
|
|
||||||
SELECT userid INTO user_id FROM sys_users WHERE token = p_token;
|
IF IFNULL(v_userid, '') = '' THEN
|
||||||
|
SET v_err_code = 4;
|
||||||
IF COALESCE(user_id, '') = '' THEN
|
SET v_err_msg = '原密碼輸入錯誤, 請重新輸入';
|
||||||
SET err_code = 4;
|
|
||||||
SET err_msg = '原密碼輸入錯誤, 請重新輸入';
|
|
||||||
ELSE
|
|
||||||
-- step 1: 先判斷是否是單一 db 架構
|
|
||||||
-- if EXISTS (SELECT * FROM information_schema.tables WHERE table_name = 'sys_menutable')
|
|
||||||
IF 1 = 1 THEN -- 利用同義字(Synonym) 解決括資料庫問題 20230823 Michael
|
|
||||||
-- step 2: 根據 zen_function 寫入 menu
|
|
||||||
-- 如果 parent_menuid 不存在, 要一併自動產生
|
|
||||||
SELECT parenttag INTO parenttag FROM zen_function WHERE functiontag = p_functiontag;
|
|
||||||
IF COALESCE(parenttag, '') = '' THEN
|
|
||||||
SET parenttag = '';
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SELECT COUNT(*) INTO cnt FROM sys_menutable WHERE menuid = parenttag AND parenttag <> '';
|
|
||||||
IF cnt = 0 THEN
|
|
||||||
INSERT INTO sys_menutable (menuid, parent_menuid, caption, moduleid, seq_no, owned)
|
|
||||||
SELECT parenttag, '', functionname + '(目錄)', projectid, functiontag, '00' FROM zen_function WHERE functiontag = p_functiontag;
|
|
||||||
|
|
||||||
INSERT INTO sys_rolemenusecurity (roleid, menuid, controlname)
|
|
||||||
SELECT '00', p_functiontag, 'read';
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
SELECT COUNT(*) INTO cnt FROM sys_menutable WHERE menuid = p_functiontag;
|
|
||||||
IF cnt = 0 THEN
|
|
||||||
INSERT INTO sys_menutable (menuid, parent_menuid, caption, moduleid, seq_no, owned)
|
|
||||||
SELECT functiontag, parenttag, functionname, projectid, functiontag, '00' FROM zen_function WHERE functiontag = p_functiontag;
|
|
||||||
END IF;
|
|
||||||
|
|
||||||
-- step 3: 根據 zen_fields 寫入 security
|
|
||||||
SELECT COUNT(*) INTO cnt FROM sys_rolemenusecurity WHERE menuid = p_functiontag;
|
|
||||||
IF cnt = 0 THEN
|
|
||||||
INSERT INTO sys_rolemenusecurity (roleid, menuid, controlname)
|
|
||||||
SELECT '00', p_functiontag, 'read'
|
|
||||||
UNION
|
|
||||||
SELECT '00', p_functiontag, 'insert'
|
|
||||||
UNION
|
|
||||||
SELECT '00', p_functiontag, 'update'
|
|
||||||
UNION
|
|
||||||
SELECT '00', p_functiontag, 'delete';
|
|
||||||
END IF;
|
|
||||||
ELSE
|
ELSE
|
||||||
SET err_code = 9;
|
-- Step 2: 根據 zen_function 寫入 menu [cite: 3]
|
||||||
SET err_msg = '必須是單一資料庫架構才能執行 !!';
|
-- 獲取父節點標籤
|
||||||
END IF;
|
SELECT IFNULL(parenttag, '') INTO v_parenttag
|
||||||
END IF;
|
FROM zen_function
|
||||||
|
WHERE functiontag = p_functiontag LIMIT 1;
|
||||||
|
|
||||||
SELECT err_code AS code, err_msg AS msg;
|
IF IFNULL(v_parenttag, '') = '' THEN
|
||||||
|
SET v_parenttag = '';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- 如果 parent_menuid 不存在,則自動產生 [cite: 4, 5]
|
||||||
|
SELECT COUNT(*) INTO v_cnt
|
||||||
|
FROM sys_menutable
|
||||||
|
WHERE menuid = v_parenttag AND v_parenttag <> '';
|
||||||
|
|
||||||
|
IF v_cnt = 0 AND v_parenttag <> '' THEN
|
||||||
|
INSERT INTO sys_menutable (menuid, parent_menuid, caption, moduleid, seq_no, owned)
|
||||||
|
SELECT parenttag, '', CONCAT(functionname, '(目錄)'), projectid, functiontag, '00'
|
||||||
|
FROM zen_function
|
||||||
|
WHERE functiontag = p_functiontag;
|
||||||
|
|
||||||
|
INSERT INTO sys_rolemenusecurity (roleid, menuid, controlname)
|
||||||
|
VALUES ('00', p_functiontag, 'read');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- 檢查並插入目前的 functiontag 選單 [cite: 7, 8]
|
||||||
|
SELECT COUNT(*) INTO v_cnt FROM sys_menutable WHERE menuid = p_functiontag;
|
||||||
|
|
||||||
|
IF v_cnt = 0 THEN
|
||||||
|
INSERT INTO sys_menutable (menuid, parent_menuid, caption, moduleid, seq_no, owned)
|
||||||
|
SELECT functiontag, v_parenttag, functionname, projectid, functiontag, '00'
|
||||||
|
FROM zen_function
|
||||||
|
WHERE functiontag = p_functiontag;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- Step 3: 根據 zen_fields 寫入基本權限 (read, insert, update, delete) [cite: 9, 10]
|
||||||
|
SELECT COUNT(*) INTO v_cnt FROM sys_rolemenusecurity WHERE menuid = p_functiontag;
|
||||||
|
|
||||||
|
IF v_cnt = 0 THEN
|
||||||
|
INSERT INTO sys_rolemenusecurity (roleid, menuid, controlname)
|
||||||
|
SELECT '00', p_functiontag, 'read'
|
||||||
|
UNION SELECT '00', p_functiontag, 'insert'
|
||||||
|
UNION SELECT '00', p_functiontag, 'update'
|
||||||
|
UNION SELECT '00', p_functiontag, 'delete';
|
||||||
|
END IF;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- 回傳執行結果 [cite: 11]
|
||||||
|
SELECT v_err_code AS code, v_err_msg AS msg;
|
||||||
|
|
||||||
END //
|
END //
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user