Esempio n. 1
0
 def update(self, instance, validated_data):
     # 验证服部门父部门不能为其本身或其子部门
     departments_id = get_child_ids(instance.id, Departments)
     if validated_data.get('pid') and validated_data.get(
             'pid').id in departments_id:
         raise serializers.ValidationError('父部门不能为其本身或其子部门')
     return super().update(instance, validated_data)
Esempio n. 2
0
 def update(self, instance, validated_data):
     if validated_data.get('menu') is False:
         if Permissions.objects.filter(pid=instance.id, menu=True):
             raise serializers.ValidationError('菜单权限存在子菜单, 请先修改子菜单')
     if validated_data.get('pid'):
         if Permissions.objects.filter(id=validated_data.get('pid').id, menu=False):
             raise serializers.ValidationError('菜单父权限必须为菜单权限')
         permissions_id = get_child_ids(instance.id, Permissions)
         if validated_data.get('pid').id in permissions_id:
             raise serializers.ValidationError('父权限不能为其本身或其子权限')
     return super().update(instance, validated_data)
Esempio n. 3
0
 def get_queryset(self, **kwargs):
     # 解决drf-yasg加载报错
     if isinstance(self.request.user, AnonymousUser):
         return Assets.objects.none()
     asset_type = kwargs.get('asset_type')
     assert asset_type is not None, '关键字参数asset_type, 为必传参数'
     assert asset_type in [
         values[0] for values in Assets.asset_type_choice
     ], 'asset_type应存在与Assets.asset_type_choice'
     # 管理员角色用户可查看所有
     if {'name': 'admin'} in self.request.user.roles.values('name'):
         return Assets.objects.filter(asset_type=asset_type)
     # 每个用户只能查看到所属部门及其子部门下的服务器, 及该用户管理服务器
     if self.request.user.department:
         departments = get_child_ids(self.request.user.department.id,
                                     Departments)
         return (Assets.objects.filter(asset_type=asset_type).filter(
             Q(department__in=departments)
             | Q(admin=self.request.user))).distinct()
     else:
         return Assets.objects.filter(asset_type=asset_type,
                                      admin=self.request.user)
Esempio n. 4
0
 def department_service_filter(self, queryset, name, value):
     """过滤该部门及所有子部门下的用户"""
     return queryset.filter(department_id__in=get_child_ids(value, Departments))