83 lines
2.5 KiB
Python
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
|
|
} |