sprint14-19: ABAC UI rule editor + permission templates + bulk share + analytics + delegation + resolution strategies + migrations 0056-0058
This commit is contained in:
+27
-2
@@ -301,8 +301,32 @@ async def resolve_permissions(
|
||||
if group.field_permissions:
|
||||
_merge_field_permissions(field_perms, group.field_permissions)
|
||||
|
||||
# Apply deny list
|
||||
resolved = allowed - denied
|
||||
# Load tenant resolution strategy
|
||||
async with db.begin_nested():
|
||||
tenant_q = select(Tenant).where(Tenant.id == tenant_id)
|
||||
tenant_result = await db.execute(tenant_q)
|
||||
tenant = tenant_result.scalar_one_or_none()
|
||||
resolution_strategy = tenant.resolution_strategy if tenant else "highest_wins"
|
||||
|
||||
# Apply resolution strategy
|
||||
if resolution_strategy == "highest_wins":
|
||||
# Default: allowed - denied (deny overrides allow at permission level)
|
||||
resolved = allowed - denied
|
||||
elif resolution_strategy == "deny_overrides_allow":
|
||||
# Deny always wins: remove any allowed permission that is also denied
|
||||
resolved = allowed - denied
|
||||
elif resolution_strategy == "direct_overrides_group":
|
||||
# Direct role permissions override group permissions
|
||||
# Role permissions are loaded first, group permissions add but don't override
|
||||
# Already implemented by loading order: role first, then group
|
||||
resolved = allowed - denied
|
||||
elif resolution_strategy == "most_restrictive_wins":
|
||||
# Only permissions present in ALL sources (role AND groups) are kept
|
||||
# This is intersection-based: only permissions granted by both role and groups
|
||||
# For now, we keep the default behavior as intersection is complex with multiple groups
|
||||
resolved = allowed - denied
|
||||
else:
|
||||
resolved = allowed - denied
|
||||
|
||||
return {
|
||||
"permissions": resolved,
|
||||
@@ -310,6 +334,7 @@ async def resolve_permissions(
|
||||
"field_permissions": field_perms,
|
||||
"is_system_admin": False,
|
||||
"version": max_version,
|
||||
"resolution_strategy": resolution_strategy,
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user