- Add SDLC dashboard, pipeline editor, ops center UI - build.sh: clone business modules to pkgs/, xls2ui CRUD, fix created_by - global_func.py: password_encode None-safe wrapper - pipeline_app.py: permission cache warmup removed - load_path.py: RBAC permission registration for all modules - scripts/merge_i18n.py: i18n merge tool - bin/init_perms.py, bin/init_data.py: init scripts - set_role_perm.py: single permission registration - Model uitype fields set for form editing - pipeline_core/pipeline_ops load_path.py scripts
103 lines
4.2 KiB
Python
103 lines
4.2 KiB
Python
#!/usr/bin/env python3
|
|
"""Register all pipeline module RBAC permissions in one run."""
|
|
import sys, os, asyncio
|
|
|
|
ROOT = os.path.expanduser("~/pipeline")
|
|
sys.path.insert(0, os.path.join(ROOT, "py3", "lib", "python3.10", "site-packages"))
|
|
sys.path.insert(0, ROOT)
|
|
|
|
from sqlor.dbpools import DBPools
|
|
from appPublic.jsonConfig import getConfig
|
|
from appPublic.folderUtils import ProgramPath
|
|
from appPublic.uniqueID import getID
|
|
from ahserver.serverenv import ServerEnv
|
|
from ahserver.globalEnv import initEnv
|
|
|
|
PERMS = [
|
|
# pipeline-sdlc
|
|
("/pipeline-sdlc", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_dashboard/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_projects/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_project_list/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_iterations/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_iteration_list/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_test_plans/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_test_plan_list/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_test_cases/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_test_case_list/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_bugs/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_bug_list/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_deploy_envs/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_deploy_env_list/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/sd_review/*", "pipeline_sdlc", "logined"),
|
|
("/pipeline-sdlc/api/*", "pipeline_sdlc", "logined"),
|
|
# pipeline_core
|
|
("/pipeline_core", "pipeline_core", "logined"),
|
|
("/pipeline_core/pipelines/*", "pipeline_core", "logined"),
|
|
("/pipeline_core/pipeline_steps/*", "pipeline_core", "logined"),
|
|
("/pipeline_core/pipeline_versions/*", "pipeline_core", "logined"),
|
|
("/pipeline_core/pipeline_editor/*", "pipeline_core", "logined"),
|
|
("/pipeline_core/api/*", "pipeline_core", "logined"),
|
|
# pipeline_ops
|
|
("/pipeline_ops", "pipeline_ops", "logined"),
|
|
("/pipeline_ops/api/*", "pipeline_ops", "logined"),
|
|
("/pipeline_ops/pipeline_pricing/*", "pipeline_ops", "logined"),
|
|
("/pipeline_ops/pipeline_capacity/*", "pipeline_ops", "logined"),
|
|
("/pipeline_ops/pipeline_usage_log/*", "pipeline_ops", "logined"),
|
|
# pipeline_dist
|
|
("/pipeline_dist", "pipeline_dist", "logined"),
|
|
("/pipeline_dist/*", "pipeline_dist", "logined"),
|
|
# showcase
|
|
("/showcase", "showcase", "logined"),
|
|
("/showcase/*", "showcase", "logined"),
|
|
# app root (any)
|
|
("/**", "app", "any"),
|
|
("/index.ui", "app", "any"),
|
|
("/pipeline-sdlc/index.ui", "pipeline_sdlc", "any"),
|
|
("/pipeline_core/index.ui", "pipeline_core", "any"),
|
|
("/pipeline_ops/index.ui", "pipeline_ops", "any"),
|
|
("/pipeline_dist/index.ui", "pipeline_dist", "any"),
|
|
]
|
|
|
|
|
|
async def register():
|
|
config = getConfig(ROOT, NS={"workdir": ROOT, "ProgramPath": ProgramPath()})
|
|
DBPools(config.databases)
|
|
initEnv()
|
|
env = ServerEnv()
|
|
env.get_module_dbname = lambda m: "sage"
|
|
|
|
async with DBPools().sqlorContext("sage") as sor:
|
|
total = 0
|
|
for path, module, role_name in PERMS:
|
|
sql = "SELECT id FROM permission WHERE path=" + repr(path) + " LIMIT 1"
|
|
existing = await sor.sqlExe(sql, {})
|
|
if existing:
|
|
continue
|
|
|
|
pid = getID()
|
|
await sor.C("permission", {
|
|
"id": pid, "name": module + ":" + path,
|
|
"path": path, "permtype": module
|
|
})
|
|
role_sql = "SELECT id FROM role WHERE name=" + repr(role_name) + " LIMIT 1"
|
|
role_recs = await sor.sqlExe(role_sql, {})
|
|
if role_recs:
|
|
await sor.C("rolepermission", {
|
|
"id": getID(),
|
|
"roleid": role_recs[0].id,
|
|
"permid": pid
|
|
})
|
|
total += 1
|
|
|
|
print(f"Registered {total} new permissions")
|
|
# Verify
|
|
async with DBPools().sqlorContext("sage") as sor:
|
|
cnt = await sor.sqlExe(
|
|
"SELECT COUNT(*) as n FROM permission WHERE path LIKE '/pipeline%' OR path LIKE '/showcase%'", {})
|
|
print(f"Total pipeline permissions: {cnt[0].n}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(register())
|