fix: tenant load_path.py 补全 /tenant/api/* 权限注册
This commit is contained in:
parent
807ced2de5
commit
54055980dd
@ -1,14 +1,15 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
"""RBAC 权限注册 — tenant 模块"""
|
"""RBAC 权限注册 — tenant 模块"""
|
||||||
import os, sys, subprocess
|
import os, sys, asyncio
|
||||||
|
|
||||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
||||||
MOD = "tenant"
|
MOD = "tenant"
|
||||||
|
|
||||||
|
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||||
for candidate in [
|
for candidate in [
|
||||||
os.path.join(SCRIPT_DIR, "..", ".."),
|
os.path.join(SCRIPT_DIR, "..", ".."),
|
||||||
os.path.expanduser("~/repos/sage"),
|
os.path.expanduser("~/repos/sage"),
|
||||||
os.path.expanduser("~/sage"),
|
os.path.expanduser("~/sage"),
|
||||||
|
"/d/apitest/sage",
|
||||||
]:
|
]:
|
||||||
if os.path.isdir(os.path.join(candidate, "wwwroot")):
|
if os.path.isdir(os.path.join(candidate, "wwwroot")):
|
||||||
SAGE_ROOT = candidate
|
SAGE_ROOT = candidate
|
||||||
@ -17,21 +18,61 @@ else:
|
|||||||
print("ERROR: Sage root not found")
|
print("ERROR: Sage root not found")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
PATHS_LOGINED = [
|
sys.path.insert(0, SAGE_ROOT)
|
||||||
f"/{MOD}",
|
from sqlor.dbpools import DBPools
|
||||||
f"/{MOD}/index.ui",
|
from appPublic.jsonConfig import getConfig
|
||||||
f"/{MOD}/tenant_domain",
|
from appPublic.dictObject import DictObject
|
||||||
f"/{MOD}/tenant_domain/index.ui",
|
from appPublic.uniqueID import getID
|
||||||
f"/{MOD}/tenant_domain/get_tenant_domain.dspy",
|
|
||||||
f"/{MOD}/tenant_domain/add_tenant_domain.dspy",
|
paths = [
|
||||||
f"/{MOD}/tenant_domain/update_tenant_domain.dspy",
|
# 模块入口
|
||||||
f"/{MOD}/tenant_domain/delete_tenant_domain.dspy",
|
(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:
|
async def main():
|
||||||
run(f'./py3/bin/python set_role_perm.py "logined" "{path}"')
|
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())
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user