tenant/scripts/load_path.py

79 lines
2.5 KiB
Python

#!/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())