You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.6 KiB
44 lines
1.6 KiB
from rest_framework import permissions
|
|
from apps.profiles.models import InstitutionMember
|
|
|
|
|
|
class IsMeetingParticipantOrStaff(permissions.BasePermission):
|
|
"""
|
|
Ensures the user belongs to either the requester or recipient institution,
|
|
or is the creator / superuser.
|
|
"""
|
|
def has_permission(self, request, view):
|
|
return bool(request.user and request.user.is_authenticated)
|
|
|
|
def has_object_permission(self, request, view, obj):
|
|
user = request.user
|
|
if user.is_superuser or getattr(user, 'user_type', None) in ['super_admin', 'regional_admin']:
|
|
return True
|
|
|
|
if obj.created_by == user:
|
|
return True
|
|
|
|
# Check if user is a member of requester or recipient institution
|
|
return InstitutionMember.objects.filter(
|
|
institution__in=[obj.requester_institution, obj.recipient_institution],
|
|
user=user
|
|
).exists()
|
|
|
|
|
|
class CanManageMeeting(permissions.BasePermission):
|
|
"""
|
|
Ensures user is an admin/editor of the requester or recipient institution.
|
|
"""
|
|
def has_permission(self, request, view):
|
|
return bool(request.user and request.user.is_authenticated)
|
|
|
|
def has_object_permission(self, request, view, obj):
|
|
user = request.user
|
|
if user.is_superuser or getattr(user, 'user_type', None) in ['super_admin', 'regional_admin']:
|
|
return True
|
|
|
|
return InstitutionMember.objects.filter(
|
|
institution__in=[obj.requester_institution, obj.recipient_institution],
|
|
user=user,
|
|
role__in=['admin', 'editor']
|
|
).exists()
|