mirror of
https://github.com/open-webui/open-webui
synced 2024-11-21 23:57:51 +00:00
refac: get permissions
This commit is contained in:
parent
c0371f6525
commit
07e0712b87
@ -1,37 +1,41 @@
|
||||
from typing import Optional, Union, List, Dict
|
||||
from typing import Optional, Union, List, Dict, Any
|
||||
from open_webui.apps.webui.models.groups import Groups
|
||||
|
||||
|
||||
def get_permissions(
|
||||
user_id: str,
|
||||
default_permissions: Dict[str, bool] = {},
|
||||
) -> dict:
|
||||
default_permissions: Dict[str, Any] = {},
|
||||
) -> Dict[str, Any]:
|
||||
"""
|
||||
Get all permissions for a user by combining the permissions of all groups the user is a member of.
|
||||
If a permission is defined in multiple groups, the most permissive value is used.
|
||||
If a permission is defined in multiple groups, the most permissive value is used (True > False).
|
||||
Permissions are nested in a dict with the permission key as the key and a boolean as the value.
|
||||
"""
|
||||
|
||||
def merge_permissions(
|
||||
permissions: Dict[str, bool], new_permissions: Dict[str, bool]
|
||||
) -> Dict[str, bool]:
|
||||
"""Merge two permission dictionaries, keeping the most permissive value."""
|
||||
for key, value in new_permissions.items():
|
||||
if key not in permissions:
|
||||
permissions[key] = value
|
||||
def combine_permissions(
|
||||
permissions: Dict[str, Any], group_permissions: Dict[str, Any]
|
||||
) -> Dict[str, Any]:
|
||||
"""Combine permissions from multiple groups by taking the most permissive value."""
|
||||
for key, value in group_permissions.items():
|
||||
if isinstance(value, dict):
|
||||
if key not in permissions:
|
||||
permissions[key] = {}
|
||||
permissions[key] = combine_permissions(permissions[key], value)
|
||||
else:
|
||||
permissions[key] = (
|
||||
permissions[key] or value
|
||||
) # Use the most permissive value
|
||||
|
||||
if key not in permissions:
|
||||
permissions[key] = value
|
||||
else:
|
||||
permissions[key] = permissions[key] or value
|
||||
return permissions
|
||||
|
||||
user_groups = Groups.get_groups_by_member_id(user_id)
|
||||
user_permissions = default_permissions.copy()
|
||||
permissions = default_permissions.copy()
|
||||
|
||||
for group in user_groups:
|
||||
user_permissions = merge_permissions(user_permissions, group.permissions)
|
||||
group_permissions = group.permissions
|
||||
permissions = combine_permissions(permissions, group_permissions)
|
||||
|
||||
return user_permissions
|
||||
return permissions
|
||||
|
||||
|
||||
def has_permission(
|
||||
|
Loading…
Reference in New Issue
Block a user