|
1
|
|
|
from rest_framework import serializers |
|
2
|
|
|
|
|
3
|
|
|
from sigma_core.models.user import User |
|
4
|
|
|
from sigma_core.models.cluster import Cluster |
|
5
|
|
|
from sigma_files.models import Image |
|
6
|
|
|
from sigma_files.serializers import ImageSerializer |
|
7
|
|
|
|
|
8
|
|
|
|
|
9
|
|
|
class UserSerializerMeta(): |
|
10
|
|
|
model = User |
|
11
|
|
|
exclude = ('is_staff', 'is_superuser', 'invited_to_groups', 'clusters', 'groups', ) |
|
12
|
|
|
read_only_fields = ('last_login', 'is_active', 'photo', ) |
|
13
|
|
|
extra_kwargs = {'password': {'write_only': True, 'required': False}} |
|
14
|
|
|
|
|
15
|
|
|
|
|
16
|
|
|
class MinimalUserSerializer(serializers.ModelSerializer): |
|
17
|
|
|
""" |
|
18
|
|
|
Serialize an User with minimal data. |
|
19
|
|
|
""" |
|
20
|
|
|
class Meta: |
|
21
|
|
|
model = User |
|
22
|
|
|
fields = ('id', 'lastname', 'firstname', 'is_active', 'clusters_ids', ) |
|
23
|
|
|
read_only_fields = ('is_active', ) |
|
24
|
|
|
|
|
25
|
|
|
clusters_ids = serializers.PrimaryKeyRelatedField(queryset=Cluster.objects.all(), many=True, source='clusters') |
|
26
|
|
|
|
|
27
|
|
|
|
|
28
|
|
|
class UserSerializer(serializers.ModelSerializer): |
|
29
|
|
|
""" |
|
30
|
|
|
Serialize an User with related keys. |
|
31
|
|
|
""" |
|
32
|
|
|
class Meta(UserSerializerMeta): |
|
33
|
|
|
pass |
|
34
|
|
|
|
|
35
|
|
|
photo = ImageSerializer(read_only=True) |
|
36
|
|
|
clusters_ids = serializers.PrimaryKeyRelatedField(queryset=Cluster.objects.all(), many=True, source='clusters') |
|
37
|
|
|
|
|
38
|
|
|
def create(self, validated_data): |
|
39
|
|
|
from sigma_core.models.group_member import GroupMember |
|
40
|
|
|
from sigma_core.models.cluster import Cluster |
|
41
|
|
|
|
|
42
|
|
|
request = self.context['request'] |
|
43
|
|
|
input_clusters_ids = request.data.get('clusters_ids', []) |
|
44
|
|
|
if request.user.is_sigma_admin(): |
|
45
|
|
|
valid_clusters_ids = Cluster.objects.filter(pk__in=input_clusters_ids).values_list('id', flat=True) |
|
46
|
|
|
else: |
|
47
|
|
|
valid_clusters_ids = GroupMember.objects.filter(user=request.user, group__in=input_clusters_ids, perm_rank__gte=Cluster.ADMINISTRATOR_RANK).values_list('group', flat=True) |
|
48
|
|
|
|
|
49
|
|
|
if set(input_clusters_ids) != set(valid_clusters_ids): |
|
50
|
|
|
raise serializers.ValidationError("Cluster list: incorrect values") |
|
51
|
|
|
return super().create(validated_data) |
|
52
|
|
|
|
|
53
|
|
|
|
|
54
|
|
|
class MyUserSerializer(UserSerializer): |
|
55
|
|
|
""" |
|
56
|
|
|
Serialize current User with related keys. |
|
57
|
|
|
""" |
|
58
|
|
|
class Meta(UserSerializerMeta): |
|
59
|
|
|
pass |
|
60
|
|
|
|
|
61
|
|
|
invited_to_groups_ids = serializers.PrimaryKeyRelatedField(read_only=True, many=True, source='invited_to_groups') |
|
62
|
|
|
|