#!/usr/bin/env python3 """RBAC 权限注册 — tenant 模块""" import os, sys, asyncio 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 break else: print("ERROR: Sage root not found") sys.exit(1) 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"), ] 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)') if __name__ == '__main__': asyncio.run(main())