fix(module-key): make module keys standalone MD format with system_key relation
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from collections import defaultdict
|
||||
|
||||
from sqlalchemy import delete, func, select
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
@@ -142,17 +140,16 @@ class PermissionGroupsRepository:
|
||||
normalized_actions = [a for a in list(dict.fromkeys(actions)) if a in {"view", "edit"}]
|
||||
normalized_member_subs = list(dict.fromkeys([s for s in member_subs if s]))
|
||||
|
||||
modules_by_system: dict[str, list[str]] = defaultdict(list)
|
||||
for full_module_key in list(dict.fromkeys([m for m in module_keys if m])):
|
||||
if "." not in full_module_key:
|
||||
continue
|
||||
system_key, module_name = full_module_key.split(".", 1)
|
||||
if module_name == "__system__":
|
||||
continue
|
||||
modules_by_system[system_key].append(module_name)
|
||||
|
||||
normalized_systems = set([s for s in system_keys if s])
|
||||
normalized_systems.update(modules_by_system.keys())
|
||||
module_pairs = []
|
||||
for pair in module_keys:
|
||||
if "|" not in pair:
|
||||
continue
|
||||
system_key, module_key = pair.split("|", 1)
|
||||
if not system_key or not module_key:
|
||||
continue
|
||||
module_pairs.append((system_key, module_key))
|
||||
normalized_systems.add(system_key)
|
||||
|
||||
self.db.execute(delete(PermissionGroupPermission).where(PermissionGroupPermission.group_id == group_id))
|
||||
self.db.execute(delete(PermissionGroupMember).where(PermissionGroupMember.group_id == group_id))
|
||||
@@ -163,7 +160,7 @@ class PermissionGroupsRepository:
|
||||
for site_key in normalized_sites:
|
||||
for action in normalized_actions:
|
||||
for system_key in sorted(normalized_systems):
|
||||
module_names = modules_by_system.get(system_key) or ["__system__"]
|
||||
module_names = [m for s, m in module_pairs if s == system_key] or ["__system__"]
|
||||
for module_name in module_names:
|
||||
self.db.add(
|
||||
PermissionGroupPermission(
|
||||
@@ -185,7 +182,7 @@ class PermissionGroupsRepository:
|
||||
actions = sorted({p.action for p in permissions if p.action in {"view", "edit"}})
|
||||
module_keys = sorted(
|
||||
{
|
||||
p.module if "." in p.module else f"{p.system}.{p.module}"
|
||||
f"{p.system}|{p.module}"
|
||||
for p in permissions
|
||||
if p.module and p.module != "__system__"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user