组长权限控制

This commit is contained in:
caoqianming 2021-05-13 09:35:14 +08:00
parent a360299bc2
commit b977024972
2 changed files with 17 additions and 9 deletions

View File

@ -3,16 +3,13 @@ from .models import *
class IsSubInspectTaskLeader(RbacPermission): class IsSubInspectTaskLeader(RbacPermission):
def has_object_permission(self, request, view, obj): def has_object_permission(self, request, view, obj):
print(obj, request.user.name)
if InspectTeam.objects.filter(subtask=obj.subtask, type='组长').first().member == request.user: if InspectTeam.objects.filter(subtask=obj.subtask, type='组长').first().member == request.user:
# 如果是组长 # 如果是组长
return True return True
return False return False
class IsInspectRecordChecker(RbacPermission): class IsInspectRecordChecker(RbacPermission):
def has_object_permission(self, request, view, obj): def has_object_permission(self, request, view, obj):
print(2, obj, request.user.name)
if obj.checker == request.user or obj.checker == None: if obj.checker == request.user or obj.checker == None:
return True return True
return False return False

View File

@ -206,13 +206,18 @@ class InspectDeptViewSet(OptimizationMixin, ListModelMixin, RetrieveModelMixin,
InspectRecord.objects.bulk_create(records) InspectRecord.objects.bulk_create(records)
return Response(status=status.HTTP_201_CREATED) return Response(status=status.HTTP_201_CREATED)
@action(methods=['put'], detail=True, perms_map = {'put':'inspectrecord_update'}, @action(methods=['put'], detail=True, perms_map = {'put':'inspectrecord_update'})
permission_classes=[IsAdminUser|IsSubInspectTaskLeader])
def start(self, request, *args, **kwargs): def start(self, request, *args, **kwargs):
""" """
对该组织开始检查 对该组织开始检查
""" """
obj = self.get_object() obj = self.get_object()
if request.user == InspectTeam.objects.get(subtask=obj.subtask, type='组长').member:
pass
else:
raise PermissionDenied
if obj.state == '待检查': if obj.state == '待检查':
obj.state = '检查中' obj.state = '检查中'
obj.start_date = timezone.now().date() obj.start_date = timezone.now().date()
@ -220,13 +225,18 @@ class InspectDeptViewSet(OptimizationMixin, ListModelMixin, RetrieveModelMixin,
return Response(InspectDeptSerializer(instance=obj).data, status=status.HTTP_200_OK) return Response(InspectDeptSerializer(instance=obj).data, status=status.HTTP_200_OK)
return Response('状态错误', status=status.HTTP_400_BAD_REQUEST) return Response('状态错误', status=status.HTTP_400_BAD_REQUEST)
@action(methods=['put'], detail=True, perms_map = {'put':'inspectrecord_update'}, @action(methods=['put'], detail=True, perms_map = {'put':'inspectrecord_update'})
permission_classes=[IsAdminUser|IsSubInspectTaskLeader])
def up(self, request, *args, **kwargs): def up(self, request, *args, **kwargs):
""" """
组长对该组织检查结果提交 组长对该组织检查结果提交
""" """
obj = self.get_object() obj = self.get_object()
if request.user == InspectTeam.objects.get(subtask=obj.subtask, type='组长').member:
pass
else:
raise PermissionDenied
if obj.state == '检查中': if obj.state == '检查中':
if InspectRecord.objects.filter(checked=False, subtask=obj.subtask, dept=obj.dept).exists(): if InspectRecord.objects.filter(checked=False, subtask=obj.subtask, dept=obj.dept).exists():
return Response('存在未完成检查记录', status=status.HTTP_400_BAD_REQUEST) return Response('存在未完成检查记录', status=status.HTTP_400_BAD_REQUEST)
@ -297,8 +307,7 @@ class InspectRecordViewSet(OptimizationMixin, PageOrNot, ModelViewSet):
InspectRecord.objects.filter(item__in=items, subtask=subtask, checker__isnull=True, checked= False).update(checker=checker) InspectRecord.objects.filter(item__in=items, subtask=subtask, checker__isnull=True, checked= False).update(checker=checker)
return Response(status=status.HTTP_200_OK) return Response(status=status.HTTP_200_OK)
@action(methods=['put'], detail=True, perms_map = {'put':'inspectrecord_update'}, @action(methods=['put'], detail=True, perms_map = {'put':'inspectrecord_update'})
permission_classes=[IsAdminUser|IsInspectRecordChecker|IsSubInspectTaskLeader])
def check(self, request, *args, **kwargs): def check(self, request, *args, **kwargs):
""" """
提交单条记录检查结果 提交单条记录检查结果
@ -306,6 +315,8 @@ class InspectRecordViewSet(OptimizationMixin, PageOrNot, ModelViewSet):
instance = self.get_object() instance = self.get_object()
leader = InspectTeam.objects.get(subtask=instance.subtask, type='组长').member leader = InspectTeam.objects.get(subtask=instance.subtask, type='组长').member
if request.user == instance.checker or request.user == None or request.user == leader: if request.user == instance.checker or request.user == None or request.user == leader:
pass
else:
raise PermissionDenied raise PermissionDenied
if instance.subtask.state == '执行中': if instance.subtask.state == '执行中':
serializer = InspectRecordCheckSerializer(instance, data=request.data) serializer = InspectRecordCheckSerializer(instance, data=request.data)