const mysql = require("mysql2/promise"); const NOW = () => new Date(); const AUD = ["created_datetime", "created_by", "updated_datetime", "updated_by"]; (async () => { const conn = await mysql.createConnection({ host: "nas.youjiala.com", port: 3307, user: "root", password: "Root@1237890", database: "Furion", charset: "utf8mb4", multipleStatements: false, }); const run = async (sql, params, label) => { const [res] = await conn.execute(sql, params); console.log(` [${label}] changedRows=${res.changedRows ?? res.affectedRows}`); return res; }; try { await conn.query("START TRANSACTION"); // 1) 权限 security_permission await run( `INSERT INTO security_permission (${AUD.join(",")},permission_name,dependent,description,delegate_indc) VALUES (?,?,?,?,'Article','','有家文化传承','') ON DUPLICATE KEY UPDATE updated_datetime=VALUES(updated_datetime),description=VALUES(description)`, [NOW(), "001", NOW(), "001"], "permission"); // 2) 功能 security_function(容器 + 查询 + 管理,镜像 photo_dic 家族) const funcs = [ ["article_dic", "有家文化", "article_dic", "N", "", "", "picture", ""], ["ArticleEnquiry", "文化传承查询", "ArticleEnquiry", "Y", "/src/views/master/ArticleEnquiry.vue", "/master/ArticleEnquiry", "wenjiansousuo", ""], ["ArticleOperation", "文化传承管理", "ArticleOperation", "Y", "/src/views/master/ArticleOperation.vue", "/master/ArticleOperation", "picture", ""], ]; for (const f of funcs) { await run( `INSERT INTO security_function (${AUD.join(",")},function_name,function_local_name,function_eng_name,function_indc,page_url,api_route,icon,page_name) VALUES (?,?,?,?,?,?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE updated_datetime=VALUES(updated_datetime),function_local_name=VALUES(function_local_name),page_url=VALUES(page_url),api_route=VALUES(api_route),icon=VALUES(icon)`, [NOW(), "001", NOW(), "001", f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]], "function:" + f[0]); } // 3) 功能树 security_function_map(挂到 BOOTUP 下,并把两个子功能挂进 article_dic) const fmap = [["BOOTUP", "article_dic", 7], ["article_dic", "ArticleEnquiry", 1], ["article_dic", "ArticleOperation", 2]]; for (const m of fmap) { await run( `INSERT INTO security_function_map (${AUD.join(",")},function_name_parent,function_name_son,orderby) VALUES (?,?,?,?,?,?,?) ON DUPLICATE KEY UPDATE updated_datetime=VALUES(updated_datetime),orderby=VALUES(orderby)`, [NOW(), "001", NOW(), "001", m[0], m[1], m[2]], "fmap:" + m[0] + ">" + m[1]); } // 4) 权限-功能映射 security_permission_function_map const pfmap = [["Article", "ArticleEnquiry"], ["Article", "ArticleOperation"]]; for (const m of pfmap) { await run( `INSERT INTO security_permission_function_map (${AUD.join(",")},permission_name,function_name) VALUES (?,?,?,?,?,?) ON DUPLICATE KEY UPDATE updated_datetime=VALUES(updated_datetime)`, [NOW(), "001", NOW(), "001", m[0], m[1]], "pfmap:" + m[1]); } // 5) 组权限分配 security_group_permission(授 vip_group 四动作全 Y,镜像 PublishPhoto) await run( `INSERT INTO security_group_permission (${AUD.join(",")},group_name,permission_name,view_indc,create_indc,amend_indc,delete_indc,dependent) VALUES (?,?,?,?,'vip_group','Article','Y','Y','Y','Y','') ON DUPLICATE KEY UPDATE updated_datetime=VALUES(updated_datetime),view_indc='Y',create_indc='Y',amend_indc='Y',delete_indc='Y'`, [NOW(), "001", NOW(), "001"], "group_perm:vip_group"); await conn.query("COMMIT"); console.log("\nCOMMIT OK"); // 回读校验 const check = async (t, s) => { const [r] = await conn.query(s); console.log("\n== " + t + " =="); console.log(JSON.stringify(r)); }; await check("permission", "SELECT permission_name,description FROM security_permission WHERE permission_name='Article'"); await check("function", "SELECT function_name,function_local_name,function_indc,icon FROM security_function WHERE function_name LIKE 'article%' OR function_name LIKE 'Article%'"); await check("function_map", "SELECT function_name_parent,function_name_son,orderby FROM security_function_map WHERE function_name_son LIKE 'article%' OR function_name_son LIKE 'Article%'"); await check("perm_function_map", "SELECT permission_name,function_name FROM security_permission_function_map WHERE permission_name='Article'"); await check("group_permission", "SELECT group_name,permission_name,view_indc,create_indc,amend_indc,delete_indc FROM security_group_permission WHERE permission_name='Article'"); } catch (e) { await conn.query("ROLLBACK"); console.log("ERROR -> ROLLBACK: " + e.message); process.exitCode = 1; } finally { await conn.end(); } })();