From 54055980ddbb2b3e7416f4743615496c9163ae2a Mon Sep 17 00:00:00 2001 From: yumoqing Date: Tue, 14 Jul 2026 15:47:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20tenant=20load=5Fpath.py=20=E8=A1=A5?= =?UTF-8?q?=E5=85=A8=20/tenant/api/*=20=E6=9D=83=E9=99=90=E6=B3=A8?= =?UTF-8?q?=E5=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/load_path.py | 73 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 57 insertions(+), 16 deletions(-) diff --git a/scripts/load_path.py b/scripts/load_path.py index 2528bdd..fd9a1cb 100644 --- a/scripts/load_path.py +++ b/scripts/load_path.py @@ -1,14 +1,15 @@ #!/usr/bin/env python3 """RBAC 权限注册 — tenant 模块""" -import os, sys, subprocess +import os, sys, asyncio -SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) MOD = "tenant" +SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) for candidate in [ os.path.join(SCRIPT_DIR, "..", ".."), os.path.expanduser("~/repos/sage"), os.path.expanduser("~/sage"), + "/d/apitest/sage", ]: if os.path.isdir(os.path.join(candidate, "wwwroot")): SAGE_ROOT = candidate @@ -17,21 +18,61 @@ else: print("ERROR: Sage root not found") sys.exit(1) -PATHS_LOGINED = [ - f"/{MOD}", - f"/{MOD}/index.ui", - f"/{MOD}/tenant_domain", - f"/{MOD}/tenant_domain/index.ui", - f"/{MOD}/tenant_domain/get_tenant_domain.dspy", - f"/{MOD}/tenant_domain/add_tenant_domain.dspy", - f"/{MOD}/tenant_domain/update_tenant_domain.dspy", - f"/{MOD}/tenant_domain/delete_tenant_domain.dspy", +sys.path.insert(0, SAGE_ROOT) +from sqlor.dbpools import DBPools +from appPublic.jsonConfig import getConfig +from appPublic.dictObject import DictObject +from appPublic.uniqueID import getID + +paths = [ + # 模块入口 + (f"/{MOD}", "logined"), + (f"/{MOD}/index.ui", "logined"), + (f"/{MOD}/menu.ui", "any"), + # CRUD 列表页 + (f"/{MOD}/tenant_domain", "logined"), + (f"/{MOD}/tenant_domain/index.ui", "logined"), + (f"/{MOD}/tenant_domain/get_tenant_domain.dspy", "logined"), + (f"/{MOD}/tenant_domain/add_tenant_domain.dspy", "logined"), + (f"/{MOD}/tenant_domain/update_tenant_domain.dspy", "logined"), + (f"/{MOD}/tenant_domain/delete_tenant_domain.dspy", "logined"), + # API 端点(之前漏掉的) + (f"/{MOD}/api/tenant_domain_list.dspy", "logined"), + (f"/{MOD}/api/tenant_domain_get.dspy", "logined"), + (f"/{MOD}/api/tenant_domain_create.dspy", "logined"), + (f"/{MOD}/api/tenant_domain_update.dspy", "logined"), + (f"/{MOD}/api/tenant_domain_delete.dspy", "logined"), + (f"/{MOD}/api/get_org_list.dspy", "logined"), + # 管理角色 + (f"/{MOD}", "*.admin"), + (f"/{MOD}", "owner.superuser"), ] -def run(cmd): - subprocess.run(cmd, shell=True, cwd=SAGE_ROOT) -for path in PATHS_LOGINED: - run(f'./py3/bin/python set_role_perm.py "logined" "{path}"') +async def main(): + config = getConfig('.') + DBPools(config.databases) + async with DBPools().sqlorContext('sage') as sor: + cnt = 0 + for path, role in paths: + r = await sor.sqlExe( + 'select * from permission where path = ${path}$ and permtype = ${role}$', + {'path': path, 'role': role} + ) + if len(r) == 0: + await sor.sqlExe( + '''insert into permission (id, path, name, permtype) + values (${id}$, ${path}$, ${name}$, ${permtype}$)''', + { + 'id': getID(), + 'path': path, + 'name': path, + 'permtype': role, + } + ) + cnt += 1 + print(f'tenant: {cnt} new permissions inserted (total {len(paths)} paths)') -print(f"tenant: {len(PATHS_LOGINED)} RBAC paths registered") + +if __name__ == '__main__': + asyncio.run(main())