def update(self, instance, validated_data): ''' 更新子管理员组并重置权限 ''' previous_perm_uids = instance.perms manager_group = super().update(instance, validated_data) perm_uids = validated_data.get('perms', None) if perm_uids is None: return manager_group next_perms = set() for perm_uid in validated_data['perms']: perm = Perm.valid_objects.filter(uid=perm_uid).first() if not perm: raise ValidationError({'perms': f'{perm_uid} not found'}) next_perms.add(perm) previous_perms = set() for perm_uid in previous_perm_uids: perm = Perm.valid_objects.filter(uid=perm_uid).first() if perm: previous_perms.add(perm) group = instance.group for perm in previous_perms - next_perms: group_perm = GroupPerm.get(group, perm) group_perm.boggle() for perm in next_perms - previous_perms: group_perm = GroupPerm.get(group, perm) group_perm.permit() return manager_group
def create_group(self, group_info): ''' 创建组 ''' serializer = GroupDetailSerializer(data=group_info) serializer.is_valid(raise_exception=True) serializer.save() group = serializer.instance group.order_no = Group.get_max_order_no(parent=group.parent) + 1 group.save() # 批量创建组权限 # 1) 去重 perm_ids = Perm.valid_objects.values_list('pk', flat=True) exist_perm_ids = GroupPerm.valid_objects.filter( owner=serializer.instance).values_list('perm_id', flat=True) perm_ids = set(perm_ids).difference(exist_perm_ids) # 2) 批量创建 group_perms = [ GroupPerm(owner=serializer.instance, perm_id=x) for x in perm_ids ] GroupPerm.objects.bulk_create(group_perms) return serializer.instance
def create(self, validated_data): ''' 创建子管理员组并分配权限 ''' perms = [] for perm_uid in validated_data.get('perms', []): perm = Perm.valid_objects.filter(uid=perm_uid).first() if not perm: raise ValidationError({'perms': f'{perm_uid} not found'}) perms.append(perm) manager_group = super().create(validated_data) group = manager_group.group for perm in perms: group_perm = GroupPerm.get(group, perm) group_perm.permit() return manager_group