diff --git a/scripts/load_path.py b/scripts/load_path.py index 9bf70e9..adcfbf4 100644 --- a/scripts/load_path.py +++ b/scripts/load_path.py @@ -1,116 +1,61 @@ #!/usr/bin/env python3 """ pricing 模块 RBAC 权限管理脚本 - -使用方法: - cd ~/repos/sage - ./py3/bin/python ~/repos/pricing/scripts/load_path.py """ - -import subprocess -import os -import sys - +import subprocess, os, sys def find_sage_root(): - candidates = [ - os.path.expanduser("~/repos/sage"), - os.path.expanduser("~/sage"), - os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), - ] - for c in candidates: + for c in [os.path.expanduser("~/repos/sage"), os.path.expanduser("~/sage"), + os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))]: if os.path.isdir(os.path.join(c, "py3")) and os.path.isdir(os.path.join(c, "wwwroot")): return c return None - SAGE_ROOT = find_sage_root() -if not SAGE_ROOT: - print("ERROR: Cannot find Sage root directory") - sys.exit(1) - +if not SAGE_ROOT: print("ERROR: Cannot find Sage root directory"); sys.exit(1) PYTHON = os.path.join(SAGE_ROOT, "py3", "bin", "python") SET_PERM_SCRIPT = os.path.join(SAGE_ROOT, "set_role_perm.py") - MOD = "pricing" -# ============================================================ -# 权限路径定义(逐条列举,禁止通配符) -# ============================================================ +PATHS_ANY = [f"/{MOD}/menu.ui"] -# any — 无需登录 -PATHS_ANY = [ - f"/{MOD}/menu.ui", -] - -# logined — 所有已登录用户 PATHS_LOGINED = [ - # 模块入口 - f"/{MOD}", - f"/{MOD}/index.ui", - - # 顶层 .ui 页面 - f"/{MOD}/load_pricing_data.ui", - f"/{MOD}/pricing_test.ui", - f"/{MOD}/test_pricing_program.ui", - f"/{MOD}/pricing_data_display.ui", - - # 顶层 .dspy 文件 - f"/{MOD}/download_pricing_data.dspy", - f"/{MOD}/download_pricing_pattern.dspy", - f"/{MOD}/get_all_pricing_programs.dspy", - f"/{MOD}/get_platform_providers.dspy", - f"/{MOD}/test_pricing_program.dspy", - f"/{MOD}/upload_pricing_data.dspy", - - # api/ .dspy 文件 + f"/{MOD}", f"/{MOD}/index.ui", + f"/{MOD}/load_pricing_data.ui", f"/{MOD}/pricing_test.ui", + f"/{MOD}/test_pricing_program.ui", f"/{MOD}/pricing_data_display.ui", + f"/{MOD}/download_pricing_data.dspy", f"/{MOD}/download_pricing_pattern.dspy", + f"/{MOD}/get_all_pricing_programs.dspy", f"/{MOD}/get_platform_providers.dspy", + f"/{MOD}/test_pricing_program.dspy", f"/{MOD}/upload_pricing_data.dspy", f"/{MOD}/api/get_pricing_display.dspy", - - # CRUD: pricing_program (auto-generated by xls2ui) - f"/{MOD}/pricing_program", - f"/{MOD}/pricing_program/index.ui", - f"/{MOD}/pricing_program/get_pricing_program.dspy", - f"/{MOD}/pricing_program/add_pricing_program.dspy", - f"/{MOD}/pricing_program/update_pricing_program.dspy", - f"/{MOD}/pricing_program/delete_pricing_program.dspy", - - # CRUD: pricing_program_timing (auto-generated by xls2ui) - f"/{MOD}/pricing_program_timing", - f"/{MOD}/pricing_program_timing/index.ui", - f"/{MOD}/pricing_program_timing/get_pricing_program_timing.dspy", - f"/{MOD}/pricing_program_timing/add_pricing_program_timing.dspy", - f"/{MOD}/pricing_program_timing/update_pricing_program_timing.dspy", - f"/{MOD}/pricing_program_timing/delete_pricing_program_timing.dspy", + f"/{MOD}/api/add_pricing_program_timing.dspy", ] -# ============================================================ -# 执行注册 -# ============================================================ - +# CRUD aliases +for alias in ["pricing_program", "pricing_program_list", "pricing_program_timing", "pricing_program_timing_list"]: + tbl = alias.replace("_list", "") + PATHS_LOGINED += [ + f"/{MOD}/{alias}", + f"/{MOD}/{alias}/index.ui", + f"/{MOD}/{alias}/get_{tbl}.dspy", + f"/{MOD}/{alias}/add_{tbl}.dspy", + f"/{MOD}/{alias}/update_{tbl}.dspy", + f"/{MOD}/{alias}/delete_{tbl}.dspy", + ] def run_set_perm(role, path): - cmd = [PYTHON, SET_PERM_SCRIPT, role, path] - result = subprocess.run(cmd, capture_output=True, text=True) - return result.returncode == 0 - + return subprocess.run([PYTHON, SET_PERM_SCRIPT, role, path], capture_output=True, text=True).returncode == 0 def register_role_paths(role, paths): - count = 0 - for p in paths: - if run_set_perm(role, p): - count += 1 + count = sum(1 for p in paths if run_set_perm(role, p)) print(f" {role}: {count}/{len(paths)} paths registered") return count - def main(): print(f"Sage root: {SAGE_ROOT}") - total = 0 - total += register_role_paths("any", PATHS_ANY) + total = register_role_paths("any", PATHS_ANY) total += register_role_paths("logined", PATHS_LOGINED) print(f"\nDone. Total {total} permission entries registered.") print("NOTE: Restart Sage after permission changes to reload RBAC cache.") - if __name__ == "__main__": main()