fix: role dropdown filter by user org_type, add get_search_roleid.dspy
This commit is contained in:
parent
18913e7064
commit
e1abe0bb71
@ -4,7 +4,14 @@
|
|||||||
"params": {
|
"params": {
|
||||||
"browserfields": {
|
"browserfields": {
|
||||||
"exclouded": ["id", "orgid"],
|
"exclouded": ["id", "orgid"],
|
||||||
"alters": {}
|
"alters": {
|
||||||
|
"roleid": {
|
||||||
|
"uitype": "code",
|
||||||
|
"dataurl": "{{entire_url('/rbac/api/get_search_roleid.dspy')}}",
|
||||||
|
"textField": "text",
|
||||||
|
"valueField": "value"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"editexclouded": [
|
"editexclouded": [
|
||||||
"id",
|
"id",
|
||||||
|
|||||||
@ -79,6 +79,7 @@ PATHS_LOGINED = [
|
|||||||
f"/{MOD}/usersync/index.dspy",
|
f"/{MOD}/usersync/index.dspy",
|
||||||
f"/{MOD}/api/add_user.dspy",
|
f"/{MOD}/api/add_user.dspy",
|
||||||
f"/{MOD}/api/update_user.dspy",
|
f"/{MOD}/api/update_user.dspy",
|
||||||
|
f"/{MOD}/api/get_search_roleid.dspy",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
32
wwwroot/api/get_search_roleid.dspy
Normal file
32
wwwroot/api/get_search_roleid.dspy
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
"""Return role options filtered by the current user's org_type.
|
||||||
|
Used by userrole CRUD form to limit roleid dropdown to own org type roles."""
|
||||||
|
userorgid = await get_userorgid()
|
||||||
|
if not userorgid:
|
||||||
|
return [{'value': '', 'text': '全部'}]
|
||||||
|
|
||||||
|
async with get_sor_context(request._run_ns, 'rbac') as sor:
|
||||||
|
# Get user's org_type
|
||||||
|
org_recs = await sor.R('organization', {'id': userorgid})
|
||||||
|
org_type = org_recs[0].org_type if org_recs else ''
|
||||||
|
|
||||||
|
# If no org_type or owner-type (org 0), show all roles
|
||||||
|
if not org_type or userorgid == '0':
|
||||||
|
recs = await sor.sqlExe(
|
||||||
|
"SELECT id, CONCAT(orgtypeid, '.', name) as name FROM role "
|
||||||
|
"WHERE id NOT IN ('anonymous', 'any', 'logined') "
|
||||||
|
"AND orgtypeid != '*' AND name != '*' "
|
||||||
|
"AND orgtypeid IS NOT NULL AND name IS NOT NULL "
|
||||||
|
"ORDER BY orgtypeid, name", {})
|
||||||
|
else:
|
||||||
|
# Filter to user's org_type only
|
||||||
|
recs = await sor.sqlExe(
|
||||||
|
"SELECT id, CONCAT(orgtypeid, '.', name) as name FROM role "
|
||||||
|
"WHERE id NOT IN ('anonymous', 'any', 'logined') "
|
||||||
|
"AND orgtypeid = ${ot}$ AND name != '*' AND name IS NOT NULL "
|
||||||
|
"ORDER BY name",
|
||||||
|
{'ot': org_type})
|
||||||
|
|
||||||
|
result = [{'value': '', 'text': '全部'}]
|
||||||
|
for r in recs:
|
||||||
|
result.append({'value': r.id, 'text': r.name})
|
||||||
|
return result
|
||||||
Loading…
x
Reference in New Issue
Block a user