创建报送/主动报送

This commit is contained in:
caoqianming 2021-03-14 22:22:38 +08:00
parent 99a113015b
commit a408760d71
4 changed files with 35 additions and 26 deletions

View File

@ -8,7 +8,6 @@ from django.conf import settings
from rest_framework import status from rest_framework import status
from rest_framework.response import Response from rest_framework.response import Response
from apps.system.models import Organization from apps.system.models import Organization
from openpyxl import Workbook, load_workbook
from django.db.models import Count from django.db.models import Count
from utils.pagination import PageOrNot from utils.pagination import PageOrNot
from apps.system.mixins import CreateUpdateCustomMixin from apps.system.mixins import CreateUpdateCustomMixin
@ -38,4 +37,14 @@ class TaskViewSet(CreateUpdateCustomMixin, ModelViewSet):
if self.action in ['create', 'update']: if self.action in ['create', 'update']:
return TaskCreateUpdateSerializer return TaskCreateUpdateSerializer
return TaskListSerializer 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)

View File

@ -180,14 +180,14 @@ class CommonAModel(SoftModel):
class CommonBModel(SoftModel): class CommonBModel(SoftModel):
""" """
业务用基本表B,包含create_by, update_by, belong_to字段 业务用基本表B,包含create_by, update_by, belong_dept字段
""" """
create_by = models.ForeignKey( create_by = models.ForeignKey(
User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name='%(class)s_create_by') User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='创建人', related_name='%(class)s_create_by')
update_by = models.ForeignKey( update_by = models.ForeignKey(
User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by') User, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='最后编辑人', related_name='%(class)s_update_by')
belong_to = models.ForeignKey( belong_dept = models.ForeignKey(
Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_to') Organization, null=True, blank=True, on_delete=models.SET_NULL, verbose_name='所属部门', related_name='%(class)s_belong_dept')
class Meta: class Meta:
abstract = True abstract = True

View File

@ -66,7 +66,7 @@ def has_obj_perm(user, obj):
""" """
数据权限控权 数据权限控权
返回对象的是否可以操作 返回对象的是否可以操作
需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
传入user, obj实例 传入user, obj实例
""" """
roles = user.roles roles = user.roles
@ -75,18 +75,18 @@ def has_obj_perm(user, obj):
return True return True
elif '自定义' in data_range: elif '自定义' in data_range:
if roles.depts.exists(): if roles.depts.exists():
if obj.belong_to not in roles.depts: if obj.belong_dept not in roles.depts:
return False return False
elif '同级及以下' in data_range: elif '同级及以下' in data_range:
if user.dept.pid: if user.dept.pid:
belong_tos = get_child_queryset2(user.dept.pid) belong_depts = get_child_queryset2(user.dept.pid)
if obj.belong_to not in belong_tos: if obj.belong_dept not in belong_depts:
return False return False
elif '本级及以下' in data_range: elif '本级及以下' in data_range:
belong_tos = get_child_queryset2(user.dept) belong_depts = get_child_queryset2(user.dept)
if obj.belong_to not in belong_tos: if obj.belong_dept not in belong_depts:
return False return False
elif '本级' in data_range: elif '本级' in data_range:
if obj.belong_to is not user.dept: if obj.belong_dept is not user.dept:
return False return False
return True return True

View File

@ -9,7 +9,7 @@ class RbacFilterSet(GenericAPIView):
""" """
数据权限控权返回的queryset 数据权限控权返回的queryset
在必须的View下继承 在必须的View下继承
需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
""" """
def get_queryset(self): def get_queryset(self):
assert self.queryset is not None, ( assert self.queryset is not None, (
@ -22,7 +22,7 @@ class RbacFilterSet(GenericAPIView):
if isinstance(queryset, QuerySet): if isinstance(queryset, QuerySet):
# Ensure queryset is re-evaluated on each request. # Ensure queryset is re-evaluated on each request.
queryset = queryset.all() queryset = queryset.all()
if hasattr(queryset.model, 'belong_to'): if hasattr(queryset.model, 'belong_dept'):
user = self.request.user user = self.request.user
roles = user.roles roles = user.roles
data_range = roles.values_list('datas', flat=True) data_range = roles.values_list('datas', flat=True)
@ -30,19 +30,19 @@ class RbacFilterSet(GenericAPIView):
return queryset return queryset
elif '自定义' in data_range: elif '自定义' in data_range:
if roles.depts.exists(): if roles.depts.exists():
queryset = queryset.filter(belong_to__in = roles.depts) queryset = queryset.filter(belong_dept__in = roles.depts)
return queryset return queryset
elif '同级及以下' in data_range: elif '同级及以下' in data_range:
if user.dept.pid: if user.dept.pid:
belong_tos = get_child_queryset2(user.dept.pid) belong_depts = get_child_queryset2(user.dept.pid)
queryset = queryset.filter(belong_to__in = belong_tos) queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset return queryset
elif '本级及以下' in data_range: elif '本级及以下' in data_range:
belong_tos = get_child_queryset2(user.dept) belong_depts = get_child_queryset2(user.dept)
queryset = queryset.filter(belong_to__in = belong_tos) queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset return queryset
elif '本级' in data_range: elif '本级' in data_range:
queryset = queryset.filter(belong_to = user.dept) queryset = queryset.filter(belong_dept = user.dept)
return queryset return queryset
elif '仅本人' in data_range: elif '仅本人' in data_range:
queryset = queryset.filter(Q(create_by=user)|Q(update_by=user)) queryset = queryset.filter(Q(create_by=user)|Q(update_by=user))
@ -54,7 +54,7 @@ class RbacFilterSet(GenericAPIView):
def rbac_filter_queryset(user, queryset): def rbac_filter_queryset(user, queryset):
""" """
数据权限控权返回的queryset方法 数据权限控权返回的queryset方法
需要控数据权限的表需有belong_to, create_by, update_by字段(部门, 创建人, 编辑人) 需要控数据权限的表需有belong_dept, create_by, update_by字段(部门, 创建人, 编辑人)
传入user实例,queryset 传入user实例,queryset
""" """
roles = user.roles roles = user.roles
@ -63,19 +63,19 @@ def rbac_filter_queryset(user, queryset):
return queryset return queryset
elif '自定义' in data_range: elif '自定义' in data_range:
if roles.depts.exists(): if roles.depts.exists():
queryset = queryset.filter(belong_to__in = roles.depts) queryset = queryset.filter(belong_dept__in = roles.depts)
return queryset return queryset
elif '同级及以下' in data_range: elif '同级及以下' in data_range:
if user.dept.pid: if user.dept.pid:
belong_tos = get_child_queryset2(user.dept.pid) belong_depts = get_child_queryset2(user.dept.pid)
queryset = queryset.filter(belong_to__in = belong_tos) queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset return queryset
elif '本级及以下' in data_range: elif '本级及以下' in data_range:
belong_tos = get_child_queryset2(user.dept) belong_depts = get_child_queryset2(user.dept)
queryset = queryset.filter(belong_to__in = belong_tos) queryset = queryset.filter(belong_dept__in = belong_depts)
return queryset return queryset
elif '本级' in data_range: elif '本级' in data_range:
queryset = queryset.filter(belong_to = user.dept) queryset = queryset.filter(belong_dept = user.dept)
return queryset return queryset
elif '仅本人' in data_range: elif '仅本人' in data_range:
queryset = queryset.filter(Q(create_by=user)|Q(update_by=user)) queryset = queryset.filter(Q(create_by=user)|Q(update_by=user))