Advertisement
Mochinov

Untitled

Apr 18th, 2022
879
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.31 KB | None | 0 0
  1.  
  2. submission_request_access.py
  3.  
  4.  
  5.  
  6. from datetime import timedelta
  7. from functools import reduce
  8. import logging
  9. from typing import Any, List, Union, Optional
  10.  
  11. from django.db.models import QuerySet, Q
  12. from django.http import HttpRequest
  13. from django.urls import reverse
  14. from django.utils import timezone
  15. from django.utils.crypto import get_random_string
  16. from rest_framework import permissions
  17. from rest_framework.decorators import permission_classes
  18. from rest_framework.request import Request
  19. from rest_framework.response import Response
  20.  
  21. from crm_notification.models import Notification
  22. from itrade import settings
  23. from misc.spliting import split_query
  24. from misc.to_int import safe_to_int
  25. from misc.views.generic_api_single_view import GenericApiSingleView
  26. from misc.views.generic_api_view import GenericApiView
  27. from misc.views.generic_filters import GenericFilters
  28. from misc.views.table_style import TableStyle
  29.  
  30. from users.models import (
  31.     SubmissionRequest,
  32.     User,
  33. )
  34.  
  35. log = logging.getLogger(__name__)
  36.  
  37.  
  38. @permission_classes((permissions.AllowAny,))
  39. class SubmissionRequestAccessElementView(GenericApiSingleView):
  40.     """Определяет структуру и содержание ответа на запросы к данным элемента User (Таб с историей активности)."""
  41.  
  42.     table_name = 'SubmissionRequestAccess'
  43.     element_verbose = 'Запросы на доступ'
  44.  
  45.     PERMISSIONS = {
  46.         # 'create': 'users.crm_users_can_add_employee',
  47.         'view': 'users.crm_users_can_view_employee',
  48.         'edit': 'users.crm_users_can_edit_employee',
  49.         # 'delete': 'users.crm_users_can_delete_employee',
  50.         'view_all': 'users.crm_users_can_view_and_edit_all',
  51.         'edit_current_user_personal_information': 'users.crm_users_edit_current_user_personal_information',
  52.     }
  53.  
  54.     def get_queryset(self, context: dict, user: User) -> QuerySet:
  55.         """Возвращает базовый (до фильтрации и пагинации) QuerySet."""
  56.  
  57.         if not user.has_perm(self.PERMISSIONS.get('view_all')):
  58.             submission_request_queryset = SubmissionRequest.objects.filter(user=user)
  59.         else:
  60.             submission_request_queryset = SubmissionRequest.objects.all()
  61.  
  62.         return submission_request_queryset
  63.  
  64.     def additional_permission_check(self, obj: Any, request: Union[HttpRequest, Request]) -> bool:
  65.         """Дополнительные проверки на разрешения."""
  66.  
  67.         user = request.user
  68.         if not user.has_perm(self.PERMISSIONS.get('view_all')):
  69.             set_of_user = User.objects.get_set_of_subordinates_user(user=user)
  70.             if obj not in set_of_user:
  71.                 return False
  72.         return True
  73.  
  74.  
  75.     def prepare_tabs_args(self, request: Union[HttpRequest, Request], obj: Any, pk: Optional[int] = -1,
  76.                           parent_id: Optional[int] = None) -> dict:
  77.         """Подготавливает словарь аргументов для табов."""
  78.  
  79.         return {
  80.             'user_id': pk,
  81.             'submission_request_access_tab_for_user_id': pk,
  82.             'submission_request_property_tab_for_user_id': pk,
  83.         }
  84.  
  85.     @staticmethod
  86.     def additional_check_for_tab(tab_name: str, user: User, context: dict, obj: Optional[Any] = None) -> bool:
  87.         """
  88.        Дополнительная проверка для таба
  89.  
  90.        Возвращает логическое значения, разрешать ли выводит таб или нет
  91.  
  92.        Пока решил не делать проверку каждого таба на права (у которых не делал, одинаковые права как и у этого таба),
  93.        тк метод has_view_permission и сама работа с пермишенами, скорее всего, будут изменятся
  94.        """
  95.  
  96.         from crm_control.views.personnel_accounting import PersonnelAccountingElementView
  97.  
  98.         if tab_name == 'personnel_accounting':
  99.             personnel_accounting_obj = (
  100.                 obj.record_in_personnel_accounting.id
  101.                 if hasattr(obj, 'record_in_personnel_accounting') and obj.record_in_personnel_accounting else None
  102.             )
  103.             return PersonnelAccountingElementView.has_view_permission(
  104.                 user=user, context=context, obj=personnel_accounting_obj
  105.             )
  106.  
  107.         return True
  108.  
  109.     def get_tables(self, context: dict, user: User, obj: Any, pk: int) -> list:
  110.         """Возвращает встроенные таблицы."""
  111.  
  112.         user_property_access_table_style = TableStyle.get_table_style(
  113.             mode=TableStyle.TableStyleMode.SIMPLE,
  114.             hide_options=False,
  115.             hide_clear_button=False,
  116.             hide_create_button=True,
  117.             hide_pagination_info=True,
  118.         )
  119.  
  120.         tables = []
  121.         if obj:
  122.             tables = [
  123.                 {
  124.                     'name': 'UserGroupOperator',
  125.                     'verbose': 'Запросы на доступ',
  126.                     'url': reverse('submission_request_access_list'),
  127.                     'prefilters': {
  128.                         'user_id_field': str(pk),
  129.                     },
  130.                 },
  131.             ]
  132.         return tables
  133.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement