2019-09-17 04:34:47 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#
|
2020-09-27 08:02:44 +00:00
|
|
|
from rest_framework.request import Request
|
|
|
|
|
2020-08-16 15:08:58 +00:00
|
|
|
from common.permissions import IsOrgAdminOrAppUser, IsValidUser
|
2019-09-19 09:27:49 +00:00
|
|
|
from common.utils import lazyproperty
|
2020-08-16 15:08:58 +00:00
|
|
|
from users.models import User
|
|
|
|
from perms.models import UserGrantedMappingNode
|
|
|
|
|
|
|
|
|
2020-09-27 08:02:44 +00:00
|
|
|
class UserNodeGrantStatusDispatchMixin:
|
2020-08-16 15:08:58 +00:00
|
|
|
|
2020-09-27 08:02:44 +00:00
|
|
|
@staticmethod
|
2020-09-29 09:13:32 +00:00
|
|
|
def get_mapping_node_by_key(key, user):
|
|
|
|
return UserGrantedMappingNode.objects.get(key=key, user=user)
|
2020-08-16 15:08:58 +00:00
|
|
|
|
2020-09-27 08:02:44 +00:00
|
|
|
def dispatch_get_data(self, key, user):
|
|
|
|
status = UserGrantedMappingNode.get_node_granted_status(key, user)
|
|
|
|
if status == UserGrantedMappingNode.GRANTED_DIRECT:
|
|
|
|
return self.get_data_on_node_direct_granted(key)
|
|
|
|
elif status == UserGrantedMappingNode.GRANTED_INDIRECT:
|
|
|
|
return self.get_data_on_node_indirect_granted(key)
|
2020-08-16 15:08:58 +00:00
|
|
|
else:
|
2020-09-27 08:02:44 +00:00
|
|
|
return self.get_data_on_node_not_granted(key)
|
|
|
|
|
|
|
|
def get_data_on_node_direct_granted(self, key):
|
|
|
|
raise NotImplementedError
|
|
|
|
|
|
|
|
def get_data_on_node_indirect_granted(self, key):
|
2020-08-16 15:08:58 +00:00
|
|
|
raise NotImplementedError
|
2019-09-17 04:34:47 +00:00
|
|
|
|
2020-09-27 08:02:44 +00:00
|
|
|
def get_data_on_node_not_granted(self, key):
|
2020-08-16 15:08:58 +00:00
|
|
|
raise NotImplementedError
|
2019-09-17 04:34:47 +00:00
|
|
|
|
2019-12-25 02:29:58 +00:00
|
|
|
|
2020-08-16 15:08:58 +00:00
|
|
|
class ForAdminMixin:
|
|
|
|
permission_classes = (IsOrgAdminOrAppUser,)
|
2020-09-27 08:02:44 +00:00
|
|
|
kwargs: dict
|
2019-09-19 09:27:49 +00:00
|
|
|
|
|
|
|
@lazyproperty
|
2020-08-16 15:08:58 +00:00
|
|
|
def user(self):
|
|
|
|
user_id = self.kwargs.get('pk')
|
|
|
|
return User.objects.get(id=user_id)
|
2019-09-17 04:34:47 +00:00
|
|
|
|
|
|
|
|
2020-08-16 15:08:58 +00:00
|
|
|
class ForUserMixin:
|
|
|
|
permission_classes = (IsValidUser,)
|
2020-09-27 08:02:44 +00:00
|
|
|
request: Request
|
2019-09-17 04:34:47 +00:00
|
|
|
|
2020-08-16 15:08:58 +00:00
|
|
|
@lazyproperty
|
|
|
|
def user(self):
|
|
|
|
return self.request.user
|