Files
docupulse/utils/permissions.py
2025-05-29 15:19:42 +02:00

83 lines
2.5 KiB
Python

from models import RoomMemberPermission, Room
from flask_login import current_user
from typing import Optional
def user_has_permission(room_id: int, permission_type: str, user_id: Optional[int] = None) -> bool:
"""
Check if a user has a specific permission in a room.
Args:
room_id: The ID of the room to check permissions for
permission_type: The type of permission to check (e.g., 'can_upload', 'can_download')
user_id: Optional user ID (defaults to current user)
Returns:
bool: True if the user has the permission, False otherwise
"""
if user_id is None:
if not current_user.is_authenticated:
return False
user_id = current_user.id
# Admins have all permissions
if current_user.is_authenticated and current_user.is_admin:
return True
# Check room membership and permissions
permission = RoomMemberPermission.query.filter_by(
room_id=room_id,
user_id=user_id
).first()
if not permission:
return False
# Check if the specific permission is granted
return getattr(permission, permission_type, False)
def get_user_permissions(room_id: int, user_id: Optional[int] = None) -> dict:
"""
Get all permissions for a user in a room.
Args:
room_id: The ID of the room to get permissions for
user_id: Optional user ID (defaults to current user)
Returns:
dict: Dictionary containing all permissions for the user
"""
if user_id is None:
if not current_user.is_authenticated:
return {}
user_id = current_user.id
# Admins have all permissions
if current_user.is_authenticated and current_user.is_admin:
return {
'can_upload': True,
'can_download': True,
'can_delete': True,
'can_rename': True,
'can_move': True,
'can_share': True,
'can_manage_members': True
}
# Get user's permissions
permission = RoomMemberPermission.query.filter_by(
room_id=room_id,
user_id=user_id
).first()
if not permission:
return {}
return {
'can_upload': permission.can_upload,
'can_download': permission.can_download,
'can_delete': permission.can_delete,
'can_rename': permission.can_rename,
'can_move': permission.can_move,
'can_share': permission.can_share,
'can_manage_members': permission.can_manage_members
}