app.infrastructure.permissions
1from rest_framework.permissions import BasePermission, SAFE_METHODS 2 3 4class HospitalPermission(BasePermission): 5 """ 6 Permission for hospital-level operations. 7 - SAFE_METHODS (GET, HEAD, OPTIONS): Allowed for all users. 8 - PUT/PATCH: Allowed for superusers and staff. 9 - DELETE: Not allowed. 10 - Other methods: Not allowed. 11 """ 12 def has_permission(self, request, view): 13 if request.method in SAFE_METHODS: 14 return True 15 if request.method in ['PUT', 'PATCH']: 16 return request.user and (request.user.is_superuser or request.user.is_staff) 17 if request.method == 'DELETE': 18 return False 19 return False 20 21 22class IsHospitalUserOrSuperUser(BasePermission): 23 """ 24 Permission for hospital users and superusers. 25 - SAFE_METHODS: Allowed if user's hospital matches object. 26 - POST: Allowed for superusers. 27 - PUT/PATCH/DELETE: Allowed for superusers or staff of the same hospital. 28 """ 29 def has_permission(self, request, view): 30 if request.method in SAFE_METHODS: 31 return True 32 if request.method == 'POST': 33 return request.user and request.user.is_superuser 34 if request.method in ['PUT', 'PATCH']: 35 return request.user and ( 36 request.user.is_superuser or 37 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 38 ) 39 if request.method == 'DELETE': 40 return request.user and ( 41 request.user.is_superuser or 42 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 43 ) 44 return False 45 46 def has_object_permission(self, request, view, obj): 47 if request.method in SAFE_METHODS: 48 return request.user.hospital_id == obj.id 49 if request.method in ['PUT', 'PATCH']: 50 return request.user and ( 51 request.user.is_superuser or 52 (request.user.is_staff and request.user.hospital_id == obj.id) 53 ) 54 if request.method == 'DELETE': 55 return request.user and ( 56 request.user.is_superuser or 57 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 58 ) 59 return False 60 61 62class RoleEditPermission(BasePermission): 63 """ 64 Permission for editing roles. 65 - SAFE_METHODS: Allowed for all users. 66 - Other methods: Allowed for superusers or staff of the same hospital. 67 """ 68 def has_permission(self, request, view): 69 if request.method in SAFE_METHODS: 70 return True 71 if request.user.is_superuser: 72 return True 73 if request.user.is_staff: 74 return request.user.hospital_id == int(view.kwargs.get('hospital_pk')) 75 return False 76 77 78class UserPermission(BasePermission): 79 """ 80 Permission for user operations. 81 - SAFE_METHODS: Allowed for all users. 82 - Superusers: Full access. 83 - Staff: Full access within their hospital. 84 - Normal users: Can edit their own profile (PUT/PATCH). 85 """ 86 def has_permission(self, request, view): 87 if request.method in SAFE_METHODS: 88 return True 89 90 hospital_id = int(view.kwargs.get('hospital_pk')) 91 92 if request.user.is_superuser: 93 return True 94 95 if request.user.is_staff and request.user.hospital_id == hospital_id: 96 return True 97 98 if request.method in ['PUT', 'PATCH']: 99 return request.user.id == int(view.kwargs.get('pk') or view.kwargs.get('id')) 100 101 return False 102 103 def has_object_permission(self, request, view, obj): 104 if request.method in SAFE_METHODS: 105 return True 106 107 if request.user.is_superuser: 108 return True 109 110 if request.user.is_staff and request.user.hospital_id == obj.hospital.id: 111 return True 112 113 if request.method in ['PUT', 'PATCH'] and request.user.id == obj.id: 114 return True 115 116 if request.method == 'DELETE': 117 return request.user.is_staff and request.user.hospital_id == obj.hospital.id 118 119 return False 120 121 122class WardPermission(BasePermission): 123 """ 124 Permission for ward operations. 125 - SAFE_METHODS: Allowed for all users. 126 - Superusers: Full access. 127 - Staff: Can add/delete within their hospital. 128 """ 129 def has_permission(self, request, view): 130 if request.method in SAFE_METHODS: 131 return True 132 133 hospital_id = int(view.kwargs.get('hospital_pk')) 134 135 if request.user.is_superuser: 136 return True 137 138 if request.method in ['POST','DELETE']: 139 if request.user.is_staff and request.user.hospital_id == hospital_id: 140 return True 141 # else not allowed 142 return False
class
HospitalPermission(rest_framework.permissions.BasePermission):
5class HospitalPermission(BasePermission): 6 """ 7 Permission for hospital-level operations. 8 - SAFE_METHODS (GET, HEAD, OPTIONS): Allowed for all users. 9 - PUT/PATCH: Allowed for superusers and staff. 10 - DELETE: Not allowed. 11 - Other methods: Not allowed. 12 """ 13 def has_permission(self, request, view): 14 if request.method in SAFE_METHODS: 15 return True 16 if request.method in ['PUT', 'PATCH']: 17 return request.user and (request.user.is_superuser or request.user.is_staff) 18 if request.method == 'DELETE': 19 return False 20 return False
Permission for hospital-level operations.
- SAFE_METHODS (GET, HEAD, OPTIONS): Allowed for all users.
- PUT/PATCH: Allowed for superusers and staff.
- DELETE: Not allowed.
- Other methods: Not allowed.
def
has_permission(self, request, view):
13 def has_permission(self, request, view): 14 if request.method in SAFE_METHODS: 15 return True 16 if request.method in ['PUT', 'PATCH']: 17 return request.user and (request.user.is_superuser or request.user.is_staff) 18 if request.method == 'DELETE': 19 return False 20 return False
Return True
if permission is granted, False
otherwise.
class
IsHospitalUserOrSuperUser(rest_framework.permissions.BasePermission):
23class IsHospitalUserOrSuperUser(BasePermission): 24 """ 25 Permission for hospital users and superusers. 26 - SAFE_METHODS: Allowed if user's hospital matches object. 27 - POST: Allowed for superusers. 28 - PUT/PATCH/DELETE: Allowed for superusers or staff of the same hospital. 29 """ 30 def has_permission(self, request, view): 31 if request.method in SAFE_METHODS: 32 return True 33 if request.method == 'POST': 34 return request.user and request.user.is_superuser 35 if request.method in ['PUT', 'PATCH']: 36 return request.user and ( 37 request.user.is_superuser or 38 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 39 ) 40 if request.method == 'DELETE': 41 return request.user and ( 42 request.user.is_superuser or 43 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 44 ) 45 return False 46 47 def has_object_permission(self, request, view, obj): 48 if request.method in SAFE_METHODS: 49 return request.user.hospital_id == obj.id 50 if request.method in ['PUT', 'PATCH']: 51 return request.user and ( 52 request.user.is_superuser or 53 (request.user.is_staff and request.user.hospital_id == obj.id) 54 ) 55 if request.method == 'DELETE': 56 return request.user and ( 57 request.user.is_superuser or 58 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 59 ) 60 return False
Permission for hospital users and superusers.
- SAFE_METHODS: Allowed if user's hospital matches object.
- POST: Allowed for superusers.
- PUT/PATCH/DELETE: Allowed for superusers or staff of the same hospital.
def
has_permission(self, request, view):
30 def has_permission(self, request, view): 31 if request.method in SAFE_METHODS: 32 return True 33 if request.method == 'POST': 34 return request.user and request.user.is_superuser 35 if request.method in ['PUT', 'PATCH']: 36 return request.user and ( 37 request.user.is_superuser or 38 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 39 ) 40 if request.method == 'DELETE': 41 return request.user and ( 42 request.user.is_superuser or 43 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 44 ) 45 return False
Return True
if permission is granted, False
otherwise.
def
has_object_permission(self, request, view, obj):
47 def has_object_permission(self, request, view, obj): 48 if request.method in SAFE_METHODS: 49 return request.user.hospital_id == obj.id 50 if request.method in ['PUT', 'PATCH']: 51 return request.user and ( 52 request.user.is_superuser or 53 (request.user.is_staff and request.user.hospital_id == obj.id) 54 ) 55 if request.method == 'DELETE': 56 return request.user and ( 57 request.user.is_superuser or 58 (request.user.is_staff and request.user.hospital_id == int(view.kwargs.get('pk'))) 59 ) 60 return False
Return True
if permission is granted, False
otherwise.
class
RoleEditPermission(rest_framework.permissions.BasePermission):
63class RoleEditPermission(BasePermission): 64 """ 65 Permission for editing roles. 66 - SAFE_METHODS: Allowed for all users. 67 - Other methods: Allowed for superusers or staff of the same hospital. 68 """ 69 def has_permission(self, request, view): 70 if request.method in SAFE_METHODS: 71 return True 72 if request.user.is_superuser: 73 return True 74 if request.user.is_staff: 75 return request.user.hospital_id == int(view.kwargs.get('hospital_pk')) 76 return False
Permission for editing roles.
- SAFE_METHODS: Allowed for all users.
- Other methods: Allowed for superusers or staff of the same hospital.
def
has_permission(self, request, view):
69 def has_permission(self, request, view): 70 if request.method in SAFE_METHODS: 71 return True 72 if request.user.is_superuser: 73 return True 74 if request.user.is_staff: 75 return request.user.hospital_id == int(view.kwargs.get('hospital_pk')) 76 return False
Return True
if permission is granted, False
otherwise.
class
UserPermission(rest_framework.permissions.BasePermission):
79class UserPermission(BasePermission): 80 """ 81 Permission for user operations. 82 - SAFE_METHODS: Allowed for all users. 83 - Superusers: Full access. 84 - Staff: Full access within their hospital. 85 - Normal users: Can edit their own profile (PUT/PATCH). 86 """ 87 def has_permission(self, request, view): 88 if request.method in SAFE_METHODS: 89 return True 90 91 hospital_id = int(view.kwargs.get('hospital_pk')) 92 93 if request.user.is_superuser: 94 return True 95 96 if request.user.is_staff and request.user.hospital_id == hospital_id: 97 return True 98 99 if request.method in ['PUT', 'PATCH']: 100 return request.user.id == int(view.kwargs.get('pk') or view.kwargs.get('id')) 101 102 return False 103 104 def has_object_permission(self, request, view, obj): 105 if request.method in SAFE_METHODS: 106 return True 107 108 if request.user.is_superuser: 109 return True 110 111 if request.user.is_staff and request.user.hospital_id == obj.hospital.id: 112 return True 113 114 if request.method in ['PUT', 'PATCH'] and request.user.id == obj.id: 115 return True 116 117 if request.method == 'DELETE': 118 return request.user.is_staff and request.user.hospital_id == obj.hospital.id 119 120 return False
Permission for user operations.
- SAFE_METHODS: Allowed for all users.
- Superusers: Full access.
- Staff: Full access within their hospital.
- Normal users: Can edit their own profile (PUT/PATCH).
def
has_permission(self, request, view):
87 def has_permission(self, request, view): 88 if request.method in SAFE_METHODS: 89 return True 90 91 hospital_id = int(view.kwargs.get('hospital_pk')) 92 93 if request.user.is_superuser: 94 return True 95 96 if request.user.is_staff and request.user.hospital_id == hospital_id: 97 return True 98 99 if request.method in ['PUT', 'PATCH']: 100 return request.user.id == int(view.kwargs.get('pk') or view.kwargs.get('id')) 101 102 return False
Return True
if permission is granted, False
otherwise.
def
has_object_permission(self, request, view, obj):
104 def has_object_permission(self, request, view, obj): 105 if request.method in SAFE_METHODS: 106 return True 107 108 if request.user.is_superuser: 109 return True 110 111 if request.user.is_staff and request.user.hospital_id == obj.hospital.id: 112 return True 113 114 if request.method in ['PUT', 'PATCH'] and request.user.id == obj.id: 115 return True 116 117 if request.method == 'DELETE': 118 return request.user.is_staff and request.user.hospital_id == obj.hospital.id 119 120 return False
Return True
if permission is granted, False
otherwise.
class
WardPermission(rest_framework.permissions.BasePermission):
123class WardPermission(BasePermission): 124 """ 125 Permission for ward operations. 126 - SAFE_METHODS: Allowed for all users. 127 - Superusers: Full access. 128 - Staff: Can add/delete within their hospital. 129 """ 130 def has_permission(self, request, view): 131 if request.method in SAFE_METHODS: 132 return True 133 134 hospital_id = int(view.kwargs.get('hospital_pk')) 135 136 if request.user.is_superuser: 137 return True 138 139 if request.method in ['POST','DELETE']: 140 if request.user.is_staff and request.user.hospital_id == hospital_id: 141 return True 142 # else not allowed 143 return False
Permission for ward operations.
- SAFE_METHODS: Allowed for all users.
- Superusers: Full access.
- Staff: Can add/delete within their hospital.
def
has_permission(self, request, view):
130 def has_permission(self, request, view): 131 if request.method in SAFE_METHODS: 132 return True 133 134 hospital_id = int(view.kwargs.get('hospital_pk')) 135 136 if request.user.is_superuser: 137 return True 138 139 if request.method in ['POST','DELETE']: 140 if request.user.is_staff and request.user.hospital_id == hospital_id: 141 return True 142 # else not allowed 143 return False
Return True
if permission is granted, False
otherwise.