From a408760d711fd524ef58b7b4df59544a48c079fe Mon Sep 17 00:00:00 2001 From: caoqianming Date: Sun, 14 Mar 2021 22:22:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=8A=A5=E9=80=81/=E4=B8=BB?= =?UTF-8?q?=E5=8A=A8=E6=8A=A5=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/supervision/views.py | 11 +++++++++- server/apps/system/models.py | 6 +++--- server/apps/system/permission.py | 14 ++++++------- server/apps/system/permission_data.py | 30 +++++++++++++-------------- 4 files changed, 35 insertions(+), 26 deletions(-) diff --git a/server/apps/supervision/views.py b/server/apps/supervision/views.py index 4215fde..fa9e169 100644 --- a/server/apps/supervision/views.py +++ b/server/apps/supervision/views.py @@ -8,7 +8,6 @@ from django.conf import settings from rest_framework import status from rest_framework.response import Response from apps.system.models import Organization -from openpyxl import Workbook, load_workbook from django.db.models import Count from utils.pagination import PageOrNot from apps.system.mixins import CreateUpdateCustomMixin @@ -38,4 +37,14 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet): if self.action in ['create', 'update']: return TaskCreateUpdateSerializer return TaskListSerializer + + @action(methods=['post'], detail=False, perms_map = {'post':'task_createself'}) + def createself(self, request): + """ + 主动报送 + """ + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + serializer.save(is_self=True, create_by=request.user, belong_dept=request.user.dept) + return Response(serializer.data, status=status.HTTP_201_CREATED) \ No newline at end of file diff --git a/server/apps/system/models.py b/server/apps/system/models.py index ab9547f..43db19b 100644 --- a/server/apps/system/models.py +++ b/server/apps/system/models.py @@ -180,14 +180,14 @@ class CommonAModel(SoftModel): class CommonBModel(SoftModel): """ - 业务用基本表B,包含create_by, update_by, belong_to字段 + 业务用基本表B,包含create_by, update_by, belong_dept字段 """ create_by = models.ForeignKey( User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name='%(class)s_create_by') update_by = models.ForeignKey( User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by') - belong_to = models.ForeignKey( - Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_to') + belong_dept = models.ForeignKey( + Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_dept') class Meta: abstract = True diff --git a/server/apps/system/permission.py b/server/apps/system/permission.py index f2b172c..62b4231 100644 --- a/server/apps/system/permission.py +++ b/server/apps/system/permission.py @@ -66,7 +66,7 @@ def has_obj_perm(user, obj): """ 数据权限控权 返回对象的是否可以操作 - 需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) + 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人) 传入user, obj实例 """ roles = user.roles @@ -75,18 +75,18 @@ def has_obj_perm(user, obj): return True elif '自定义' in data_range: if roles.depts.exists(): - if obj.belong_to not in roles.depts: + if obj.belong_dept not in roles.depts: return False elif '同级及以下' in data_range: if user.dept.pid: - belong_tos = get_child_queryset2(user.dept.pid) - if obj.belong_to not in belong_tos: + belong_depts = get_child_queryset2(user.dept.pid) + if obj.belong_dept not in belong_depts: return False elif '本级及以下' in data_range: - belong_tos = get_child_queryset2(user.dept) - if obj.belong_to not in belong_tos: + belong_depts = get_child_queryset2(user.dept) + if obj.belong_dept not in belong_depts: return False elif '本级' in data_range: - if obj.belong_to is not user.dept: + if obj.belong_dept is not user.dept: return False return True \ No newline at end of file diff --git a/server/apps/system/permission_data.py b/server/apps/system/permission_data.py index 45173e9..e195c44 100644 --- a/server/apps/system/permission_data.py +++ b/server/apps/system/permission_data.py @@ -9,7 +9,7 @@ class RbacFilterSet(GenericAPIView): """ 数据权限控权返回的queryset 在必须的View下继承 - 需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) + 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人) """ def get_queryset(self): assert self.queryset is not None, ( @@ -22,7 +22,7 @@ class RbacFilterSet(GenericAPIView): if isinstance(queryset, QuerySet): # Ensure queryset is re-evaluated on each request. queryset = queryset.all() - if hasattr(queryset.model, 'belong_to'): + if hasattr(queryset.model, 'belong_dept'): user = self.request.user roles = user.roles data_range = roles.values_list('datas', flat=True) @@ -30,19 +30,19 @@ class RbacFilterSet(GenericAPIView): return queryset elif '自定义' in data_range: if roles.depts.exists(): - queryset = queryset.filter(belong_to__in = roles.depts) + queryset = queryset.filter(belong_dept__in = roles.depts) return queryset elif '同级及以下' in data_range: if user.dept.pid: - belong_tos = get_child_queryset2(user.dept.pid) - queryset = queryset.filter(belong_to__in = belong_tos) + belong_depts = get_child_queryset2(user.dept.pid) + queryset = queryset.filter(belong_dept__in = belong_depts) return queryset elif '本级及以下' in data_range: - belong_tos = get_child_queryset2(user.dept) - queryset = queryset.filter(belong_to__in = belong_tos) + belong_depts = get_child_queryset2(user.dept) + queryset = queryset.filter(belong_dept__in = belong_depts) return queryset elif '本级' in data_range: - queryset = queryset.filter(belong_to = user.dept) + queryset = queryset.filter(belong_dept = user.dept) return queryset elif '仅本人' in data_range: queryset = queryset.filter(Q(create_by=user)|Q(update_by=user)) @@ -54,7 +54,7 @@ class RbacFilterSet(GenericAPIView): def rbac_filter_queryset(user, queryset): """ 数据权限控权返回的queryset方法 - 需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) + 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人) 传入user实例,queryset """ roles = user.roles @@ -63,19 +63,19 @@ def rbac_filter_queryset(user, queryset): return queryset elif '自定义' in data_range: if roles.depts.exists(): - queryset = queryset.filter(belong_to__in = roles.depts) + queryset = queryset.filter(belong_dept__in = roles.depts) return queryset elif '同级及以下' in data_range: if user.dept.pid: - belong_tos = get_child_queryset2(user.dept.pid) - queryset = queryset.filter(belong_to__in = belong_tos) + belong_depts = get_child_queryset2(user.dept.pid) + queryset = queryset.filter(belong_dept__in = belong_depts) return queryset elif '本级及以下' in data_range: - belong_tos = get_child_queryset2(user.dept) - queryset = queryset.filter(belong_to__in = belong_tos) + belong_depts = get_child_queryset2(user.dept) + queryset = queryset.filter(belong_dept__in = belong_depts) return queryset elif '本级' in data_range: - queryset = queryset.filter(belong_to = user.dept) + queryset = queryset.filter(belong_dept = user.dept) return queryset elif '仅本人' in data_range: queryset = queryset.filter(Q(create_by=user)|Q(update_by=user))