40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
|
from typing import Any, Dict, List
|
||
|
|
||
|
from openslides.utils.access_permissions import BaseAccessPermissions
|
||
|
from openslides.utils.auth import async_has_perm, async_in_some_groups
|
||
|
|
||
|
|
||
|
class ChatGroupAccessPermissions(BaseAccessPermissions):
|
||
|
"""
|
||
|
Access permissions container for ChatGroup and ChatGroupViewSet.
|
||
|
No base perm: The access permissions are done with the access groups
|
||
|
"""
|
||
|
|
||
|
async def get_restricted_data(
|
||
|
self, full_data: List[Dict[str, Any]], user_id: int
|
||
|
) -> List[Dict[str, Any]]:
|
||
|
"""
|
||
|
Manage users can see all groups. Else, for each group either it has no access groups
|
||
|
or the user must be in an access group.
|
||
|
"""
|
||
|
data: List[Dict[str, Any]] = []
|
||
|
if await async_has_perm(user_id, "chat.can_manage"):
|
||
|
data = full_data
|
||
|
else:
|
||
|
for full in full_data:
|
||
|
access_groups = full.get("access_groups_id", [])
|
||
|
if len(
|
||
|
full.get("access_groups_id", [])
|
||
|
) == 0 or await async_in_some_groups(user_id, access_groups):
|
||
|
data.append(full)
|
||
|
return data
|
||
|
|
||
|
|
||
|
class ChatMessageAccessPermissions(ChatGroupAccessPermissions):
|
||
|
"""
|
||
|
Access permissions container for ChatMessage and ChatMessageViewSet.
|
||
|
It does exaclty the same as ChatGroupAccessPermissions
|
||
|
"""
|
||
|
|
||
|
pass
|