cms/dingdingflow/scripts/load_path.py
yumoqing 569c8e6715 refactor: CMS从Sage子模块重构为独立ahserver Web应用
架构变更:
- CMS作为独立进程运行(端口9090),不再嵌入Sage
- 使用ahserver框架,复用rbac模块做认证授权
- 所有模块共享sage数据库(配置在conf/config.json)

新增文件:
- app/cms.py: 独立Web应用主入口(webapp(init))
- app/global_func.py: 全局函数(get_module_dbname/UiWindow等)
- conf/config.json: 应用配置模板(数据库/路径/处理器/Redis)
- start.sh/stop.sh: 进程管理脚本
- pyproject.toml: 顶层Python包配置

路径重构(去掉/entcms前缀):
- 官网首页: /entcms/index.ui → /index.ui
- 管理后台: /entcms/admin.ui → /admin.ui
- API: /entcms/api/xxx.dspy → /api/xxx.dspy
- CRUD: /entcms/cms_content_list → /cms_content_list
- dingdingflow保持/dingdingflow前缀(映射子目录)

config.json路径映射:
- entcms/wwwroot → / (根路径)
- dingdingflow/wwwroot → /dingdingflow
- bricks/dist → /bricks

构建脚本(build.sh):
- 创建独立venv(py3/)
- 安装核心依赖(apppublic/sqlor/ahserver/bricks/rbac等)
- json2ddl生成CMS业务表DDL
- xls2ui生成CRUD UI
- 生成systemd服务文件

load_path.py更新:
- entcms: 所有路径去掉/entcms前缀
- dingdingflow: 保持/dingdingflow前缀
- 查找set_role_perm.py支持CMS和Sage两种环境

init_superuser.py更新:
- 支持CMS独立环境(自动检测py3/conf)
- 创建superuser角色并分配全部权限
2026-05-27 17:20:36 +08:00

75 lines
2.4 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.

"""
dingdingflow RBAC权限配置 — 企业类型: owner
CMS独立部署dingdingflow路径保持/dingdingflow前缀
用法: cd ~/repos/cms && py3/bin/python dingdingflow/scripts/load_path.py
"""
import os, sys, subprocess
def find_app_root():
script_dir = os.path.dirname(os.path.abspath(__file__))
return os.path.dirname(os.path.dirname(script_dir))
app_root = find_app_root()
sage_root = None
for c in [os.path.expanduser("~/repos/sage"), os.path.expanduser("~/sage")]:
if os.path.isdir(os.path.join(c, "py3", "bin")):
sage_root = c
break
if not sage_root:
sage_root = app_root
py = os.path.join(app_root, "py3", "bin", "python")
sp = os.path.join(sage_root, "set_role_perm.py") if os.path.exists(os.path.join(sage_root, "set_role_perm.py")) else None
if not sp:
print("ERROR: 找不到set_role_perm.py"); sys.exit(1)
def run(role, paths):
for p in paths:
print(f" {role:30s} {p}")
subprocess.run([py, sp, role, p], cwd=sage_root, capture_output=True)
any_paths = [
"/dingdingflow/api/dingtalk_callback.dspy",
"/dingdingflow/menu.ui",
]
webmaster_paths = [
"/dingdingflow",
"/dingdingflow/index.ui",
"/dingdingflow/api/submit_approval.dspy",
"/dingdingflow/dd_approvals", "/dingdingflow/dd_approvals/%",
"/dingdingflow/api/dd_approvals_list.dspy",
]
reviewer_paths = [
"/dingdingflow",
"/dingdingflow/index.ui",
"/dingdingflow/dd_approvals", "/dingdingflow/dd_approvals/%",
"/dingdingflow/api/dd_approvals_list.dspy",
"/dingdingflow/api/dd_approvals_update.dspy",
]
supervisor_paths = [
"/dingdingflow",
"/dingdingflow/index.ui",
"/dingdingflow/dd_approvals", "/dingdingflow/dd_approvals/%",
"/dingdingflow/dd_approval_configs", "/dingdingflow/dd_approval_configs/%",
"/dingdingflow/api/dd_approvals_create.dspy",
"/dingdingflow/api/dd_approvals_update.dspy",
"/dingdingflow/api/dd_approvals_delete.dspy",
"/dingdingflow/api/dd_approvals_list.dspy",
"/dingdingflow/api/dd_approval_configs_create.dspy",
"/dingdingflow/api/dd_approval_configs_update.dspy",
"/dingdingflow/api/dd_approval_configs_delete.dspy",
"/dingdingflow/api/dd_approval_configs_list.dspy",
"/dingdingflow/api/submit_approval.dspy",
]
print("=== dingdingflow RBAC权限配置 ===")
run("any", any_paths)
run("owner.webmaster", webmaster_paths)
run("owner.reviewer", reviewer_paths)
run("owner.supervisor", supervisor_paths)
print("\n完成")