2019-09-17 04:34:47 +00:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
#
|
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 rest_framework.generics import get_object_or_404
|
|
|
|
|
|
|
|
from users.models import User
|
|
|
|
from perms.models import UserGrantedMappingNode
|
|
|
|
from common.exceptions import JMSObjectDoesNotExist
|
|
|
|
from perms.async_tasks.mapping_node_task import submit_update_mapping_node_task_for_user
|
|
|
|
from ...hands import Node
|
|
|
|
|
|
|
|
|
|
|
|
class UserGrantedNodeDispatchMixin:
|
|
|
|
|
|
|
|
def submit_update_mapping_node_task(self, user):
|
|
|
|
submit_update_mapping_node_task_for_user(user)
|
|
|
|
|
|
|
|
def dispatch_node_process(self, key, mapping_node: UserGrantedMappingNode, node: Node = None):
|
|
|
|
if mapping_node is None:
|
|
|
|
ancestor_keys = Node.get_node_ancestor_keys(key)
|
|
|
|
granted = UserGrantedMappingNode.objects.filter(key__in=ancestor_keys, granted=True).exists()
|
|
|
|
if not granted:
|
|
|
|
raise JMSObjectDoesNotExist(object_name=Node._meta.object_name)
|
|
|
|
queryset = self.on_granted_node(key, mapping_node, node)
|
|
|
|
else:
|
|
|
|
if mapping_node.granted:
|
|
|
|
# granted_node
|
|
|
|
queryset = self.on_granted_node(key, mapping_node, node)
|
|
|
|
else:
|
|
|
|
queryset = self.on_ungranted_node(key, mapping_node, node)
|
|
|
|
return queryset
|
2019-09-17 04:34:47 +00:00
|
|
|
|
2020-08-16 15:08:58 +00:00
|
|
|
def on_granted_node(self, key, mapping_node: UserGrantedMappingNode, node: Node = None):
|
|
|
|
raise NotImplementedError
|
2019-09-17 04:34:47 +00:00
|
|
|
|
2020-08-16 15:08:58 +00:00
|
|
|
def on_ungranted_node(self, key, mapping_node: UserGrantedMappingNode, node: Node = None):
|
|
|
|
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,)
|
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,)
|
2019-09-17 04:34:47 +00:00
|
|
|
|
2020-08-16 15:08:58 +00:00
|
|
|
@lazyproperty
|
|
|
|
def user(self):
|
|
|
|
return self.request.user
|