Advertisement
Mochinov

Untitled

Apr 11th, 2022
942
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.56 KB | None | 0 0
  1.  
  2.  
  3. @permission_classes((permissions.AllowAny,))
  4. class UserPropertyAccessElementView(GenericApiSingleView):
  5.     """Определяет структуру и содержание ответа на запросы к данным элемента User (Таб с историей активности)."""
  6.  
  7.     table_name = 'UserPropertyAccess'
  8.     element_verbose = 'Имущество и доступ'
  9.  
  10.     PERMISSIONS = {
  11.         # 'create': 'users.crm_users_can_add_employee',
  12.         'view': 'users.crm_users_can_view_employee',
  13.         'edit': 'users.crm_users_can_edit_employee',
  14.         # 'delete': 'users.crm_users_can_delete_employee',
  15.         'view_all': 'users.crm_users_can_view_and_edit_all',
  16.         'edit_current_user_personal_information': 'users.crm_users_edit_current_user_personal_information',
  17.     }
  18.  
  19.     def get_queryset(self, context: dict, user: User) -> QuerySet:
  20.         """Возвращает базовый (до фильтрации и пагинации) QuerySet."""
  21.  
  22.         return User.objects.all()
  23.  
  24.     def additional_permission_check(self, obj: Any, request: Union[HttpRequest, Request]) -> bool:
  25.         """Дополнительные проверки на разрешения."""
  26.  
  27.         user = request.user
  28.         if not user.has_perm(self.PERMISSIONS.get('view_all')):
  29.             set_of_user = User.objects.get_set_of_subordinates_user(user=user)
  30.             if obj not in set_of_user:
  31.                 return False
  32.         return True
  33.  
  34.     def prepare_tabs_args(self, request: Union[HttpRequest, Request], obj: Any, pk: Optional[int] = -1,
  35.                           parent_id: Optional[int] = None) -> dict:
  36.         """Подготавливает словарь аргументов для табов."""
  37.  
  38.         return {
  39.             'user_id': pk,
  40.             'personnel_accounting_id': (
  41.                 obj.record_in_personnel_accounting.id
  42.                 if hasattr(obj, 'record_in_personnel_accounting') and obj.record_in_personnel_accounting else None
  43.             ),
  44.             'billing_information_user_id': pk,
  45.             'additional_information_user_id': pk,
  46.             'referrals_tab_for_user_id': pk,
  47.             'activity_history_tab_for_user_id': pk,
  48.             'user_changes_tab_for_user_id': pk,
  49.             'access_and_property_tab_for_user_id': pk,
  50.         }
  51.  
  52.     @staticmethod
  53.     def additional_check_for_tab(tab_name: str, user: User, context: dict, obj: Optional[Any] = None) -> bool:
  54.         """
  55.        Дополнительная проверка для таба
  56.  
  57.        Возвращает логическое значения, разрешать ли выводит таб или нет
  58.  
  59.        Пока решил не делать проверку каждого таба на права (у которых не делал, одинаковые права как и у этого таба),
  60.        тк метод has_view_permission и сама работа с пермишенами, скорее всего, будут изменятся
  61.        """
  62.  
  63.         from crm_control.views.personnel_accounting import PersonnelAccountingElementView
  64.  
  65.         if tab_name == 'personnel_accounting':
  66.             personnel_accounting_obj = (
  67.                 obj.record_in_personnel_accounting.id
  68.                 if hasattr(obj, 'record_in_personnel_accounting') and obj.record_in_personnel_accounting else None
  69.             )
  70.             return PersonnelAccountingElementView.has_view_permission(
  71.                 user=user, context=context, obj=personnel_accounting_obj
  72.             )
  73.  
  74.         return True
  75.  
  76.     def get_tables(self, context: dict, user: User, obj: Any, pk: int) -> list:
  77.         """Возвращает встроенные таблицы."""
  78.  
  79.         user_property_access_table_style = TableStyle.get_table_style(mode=TableStyle.TableStyleMode.NORMAL,
  80.                                                                   hide_options=False, hide_clear_button=False,
  81.                                                                   hide_create_button=True, hide_pagination_info=True)
  82.         tables = []
  83.  
  84.  
  85.         if obj:
  86.             tables = [
  87.                 {
  88.                     'name': 'ActivityHistory',
  89.                     'verbose': 'Имущество и доступы',
  90.                     'url': reverse('access_and_property_retrieve'),
  91.                     'prefilters': {
  92.                         'table_style': user_property_access_table_style,
  93.                         'user_id_field': str(pk),
  94.                     },
  95.                 },
  96.             ]
  97.         return tables
  98.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement