This commit is contained in:
yumoqing 2025-04-06 16:04:44 +08:00
parent 5dd0c98f3b
commit 94909bf061
5 changed files with 53 additions and 32 deletions

9
rbac/audit_log.py Normal file
View File

@ -0,0 +1,9 @@
from sqlor.dbpools import DBPools
from appPublic.dictObject import DictObject
from appPublic.uniqueID import getID
import json
def write_audit_log(sor, request):
id = getID()
params_kw = get_params_kw(request)

View File

@ -8,8 +8,8 @@ from appPublic.jsonConfig import getConfig
from appPublic.log import debug, exception from appPublic.log import debug, exception
from appPublic.dictObject import DictObject from appPublic.dictObject import DictObject
from appPublic.uniqueID import getID from appPublic.uniqueID import getID
from ahserver.auth_api import AuthAPI, user_login
from ahserver.globalEnv import password_encode from ahserver.globalEnv import password_encode
from ahserver.auth_api import AuthAPI, user_login
from ahserver.serverenv import ServerEnv, get_serverenv, set_serverenv from ahserver.serverenv import ServerEnv, get_serverenv, set_serverenv
import jwt import jwt
@ -88,13 +88,6 @@ async def register_user(sor, ns):
await create_user(sor, ns) await create_user(sor, ns)
return id return id
def load_rbac():
AuthAPI.checkUserPermission = objcheckperm
env = ServerEnv()
env.get_user_roles = get_user_roles
env.check_user_password = checkUserPassword
env.register_user = register_user
async def get_dbname(): async def get_dbname():
rf = RegisterFunction() rf = RegisterFunction()
dbname = await rf.exe('get_module_dbname', 'rbac') dbname = await rf.exe('get_module_dbname', 'rbac')

12
rbac/init.py Normal file
View File

@ -0,0 +1,12 @@
from rbac.check_perm import objcheckperm, get_user_role, checkUserPassword, register_user
from rbac.set_role_perms import set_role_perm, set_role_perms
def load_rbac():
AuthAPI.checkUserPermission = objcheckperm
env = ServerEnv()
env.get_user_roles = get_user_roles
env.check_user_password = checkUserPassword
env.register_user = register_user
env.set_role_perm = set_role_perm
env.set_role_perms = set_role_perms

55
script/roleperm.py → rbac/set_role_perms.py Executable file → Normal file
View File

@ -9,13 +9,17 @@ from appPublic.asynciorun import run
async def set_role_perm(dbname, module, orgtype, role, tblname): async def set_role_perm(dbname, module, orgtype, role, tblname):
db = DBPools() db = DBPools()
async with db.sqlorContext(dbname) as sor: async with db.sqlorContext(dbname) as sor:
paths = [ if '/' in dbname:
f'/{module}/{tblname}/index.ui', path = [f'/{module}/{dbname}']
f'/{module}/{tblname}/get_{tblname}.dspy', else:
f'/{module}/{tblname}/add_{tblname}.dspy', paths = [
f'/{module}/{tblname}/delete_{tblname}.dspy', f'/{module}/{tblname}',
f'/{module}/{tblname}/update_{tblname}.dspy' f'/{module}/{tblname}/index.ui',
] f'/{module}/{tblname}/get_{tblname}.dspy',
f'/{module}/{tblname}/add_{tblname}.dspy',
f'/{module}/{tblname}/delete_{tblname}.dspy',
f'/{module}/{tblname}/update_{tblname}.dspy'
]
for pat in paths: for pat in paths:
recs = await sor.R('permission', {'path': pat}) recs = await sor.R('permission', {'path': pat})
if len(recs) == 0: if len(recs) == 0:
@ -40,25 +44,28 @@ async def set_role_perm(dbname, module, orgtype, role, tblname):
}) })
print(f'{orgtype=}, {role=}, {tblname=} permission configured') print(f'{orgtype=}, {role=}, {tblname=} permission configured')
async def main(): async def set_role_perms(dbname, module, orgtype, role, items):
if len(sys.argv) < 6: for tblname in items:
print(f'{sys.argv[0]} dbname module orgtype role tblname ...\n')
sys.exit(1)
dbname = sys.argv[1]
module = sys.argv[2]
orgtype = sys.argv[3]
role = sys.argv[4]
for tblname in sys.argv[5:]:
await set_role_perm(dbname, module, orgtype, role, tblname) await set_role_perm(dbname, module, orgtype, role, tblname)
def run(coro):
p = '.'
config = getConfig(p, {'woridir':p})
DBPools(config.databases)
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(coro())
if __name__ == '__main__': if __name__ == '__main__':
async def main():
if len(sys.argv) < 6:
print(f'{sys.argv[0]} dbname module orgtype role tblname ...\n')
sys.exit(1)
dbname = sys.argv[1]
module = sys.argv[2]
orgtype = sys.argv[3]
role = sys.argv[4]
await set_role_perms(dbname, module, orgtype, role, sys.argv[5:])
def run(coro):
p = '.'
config = getConfig(p, {'woridir':p})
DBPools(config.databases)
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
loop.run_until_complete(coro())
run(main) run(main)

0
rbac/version.py Executable file → Normal file
View File