-
-
Notifications
You must be signed in to change notification settings - Fork 214
/
Copy pathmixins.py
37 lines (28 loc) · 1.25 KB
/
mixins.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
from openwisp_users.api.mixins import FilterByOrganizationManaged
from openwisp_users.api.mixins import ProtectedAPIMixin as BaseProtectedAPIMixin
from openwisp_users.api.permissions import DjangoModelPermissions, IsOrganizationManager
class RelatedDeviceModelPermission(DjangoModelPermissions):
_device_field = 'device'
def _has_permissions(self, request, view, perm, obj=None):
if request.method in self.READ_ONLY_METHOD:
return perm
if obj:
device = getattr(obj, self._device_field)
else:
device = view.get_parent_queryset()[0]
return perm and not device.is_deactivated()
def has_permission(self, request, view):
perm = super().has_permission(request, view)
return self._has_permissions(request, view, perm)
def has_object_permission(self, request, view, obj):
perm = super().has_object_permission(request, view, obj)
return self._has_permissions(request, view, perm, obj)
class RelatedDeviceProtectedAPIMixin(
BaseProtectedAPIMixin, FilterByOrganizationManaged
):
permission_classes = [
IsOrganizationManager,
RelatedDeviceModelPermission,
]
class ProtectedAPIMixin(BaseProtectedAPIMixin, FilterByOrganizationManaged):
pass