reallife_asset/scripts/load_path.py
yumoqing 925f58b025 feat: 添加私域虚拟人素材功能
- init.py: 新增6个虚拟人函数(create/list/upload/sync等),注册到ServerEnv
- api_mapping: 新增create_group→CreateAssetGroup映射
- 外部API: 5个rl_virtual_*.dspy端点(创建组合/列表/上传/素材列表/状态)
- 前端API: 4个submit/get dspy端点(UI表单提交和数据获取)
- UI页面: 3个页面(创建组合/上传素材/查看素材)
- index.ui: 左侧导航新增虚拟人素材分区(3个按钮)
- load_path.py: RBAC新增virtual页面和api/%路径
- docs: api_downapp.md新增虚拟人API文档(5个端点)
2026-06-02 15:25:14 +08:00

116 lines
3.1 KiB
Python
Raw 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.

#!/usr/bin/env python3
"""
reallife_asset 模块 RBAC 权限管理脚本
使用方法:
cd ~/repos/sage
./py3/bin/python ~/repos/reallife_asset/scripts/load_path.py
每次代码变更如有新 path 出现,需同步更新此脚本。
"""
import subprocess
import os
import 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:
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)
PYTHON = os.path.join(SAGE_ROOT, "py3", "bin", "python")
SET_PERM_SCRIPT = os.path.join(SAGE_ROOT, "set_role_perm.py")
MOD = "reallife_asset"
# ============================================================
# 权限路径定义 — 每次新增页面或API时同步更新
# ============================================================
# any — 无需登录(菜单、静态资源、回调)
PATHS_ANY = [
f"/{MOD}/menu.ui",
f"/{MOD}/imgs/%",
f"/{MOD}/api/rl_callback.dspy", # 供应商回调,无需登录
]
# logined — 所有已登录用户(含客户)
PATHS_LOGINED = [
# 模块入口
f"/{MOD}",
f"/{MOD}/index.ui",
# 客户可用页面
f"/{MOD}/create_validate.ui",
f"/{MOD}/upload_asset.ui",
f"/{MOD}/view_assets.ui",
# 虚拟人素材页面
f"/{MOD}/virtual_create_group.ui",
f"/{MOD}/virtual_upload_asset.ui",
f"/{MOD}/virtual_view_assets.ui",
# API — 所有 api/ 下的 .dspy脚本内部通过 get_user() 做权限校验)
f"/{MOD}/api/%",
]
# reseller.operator — 管理员专属页面
PATHS_OPERATOR = [
f"/{MOD}/group_manage.ui",
f"/{MOD}/asset_manage.ui",
f"/{MOD}/vendor_config_manage.ui",
f"/{MOD}/vendor_config_edit.ui",
f"/{MOD}/org_group_manage.ui",
f"/{MOD}/sync_groups.ui",
]
# owner.superuser — 同 operator
PATHS_SUPERUSER = PATHS_OPERATOR
# ============================================================
# 执行注册
# ============================================================
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
def register_role_paths(role, paths):
count = 0
for p in paths:
if run_set_perm(role, p):
count += 1
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("logined", PATHS_LOGINED)
total += register_role_paths("reseller.operator", PATHS_OPERATOR)
total += register_role_paths("owner.superuser", PATHS_SUPERUSER)
print(f"\nDone. Total {total} permission entries registered.")
print("NOTE: Restart Sage after permission changes to reload RBAC cache.")
if __name__ == "__main__":
main()