Files
2026-10-22 13:55:27 +08:00

88 lines
4.8 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();
}
})();