65 lines
1.8 KiB
Python
65 lines
1.8 KiB
Python
from django.contrib.auth.models import Group
|
|
from django.contrib.auth.models import User
|
|
from rest_framework import serializers
|
|
|
|
|
|
class UserSerializer(serializers.ModelSerializer):
|
|
|
|
groups = serializers.SerializerMethodField()
|
|
permissions = serializers.SerializerMethodField()
|
|
inherited_permissions = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = User
|
|
fields = (
|
|
"id",
|
|
"username",
|
|
"first_name",
|
|
"last_name",
|
|
"date_joined",
|
|
"is_staff",
|
|
"is_active",
|
|
"is_superuser",
|
|
"groups",
|
|
"permissions",
|
|
"inherited_permissions",
|
|
)
|
|
|
|
def get_groups(self, obj):
|
|
return list(obj.groups.values_list("name", flat=True))
|
|
|
|
def get_permissions(self, obj):
|
|
# obj.get_user_permissions() returns more permissions than desired
|
|
permission_natural_keys = []
|
|
permissions = obj.user_permissions.all()
|
|
for permission in permissions:
|
|
permission_natural_keys.append(
|
|
permission.natural_key()[1] + "." + permission.natural_key()[0],
|
|
)
|
|
return permission_natural_keys
|
|
|
|
def get_inherited_permissions(self, obj):
|
|
return obj.get_group_permissions()
|
|
|
|
|
|
class GroupSerializer(serializers.ModelSerializer):
|
|
|
|
permissions = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = Group
|
|
fields = (
|
|
"id",
|
|
"name",
|
|
"permissions",
|
|
)
|
|
|
|
def get_permissions(self, obj):
|
|
permission_natural_keys = []
|
|
permissions = obj.permissions.all()
|
|
for permission in permissions:
|
|
permission_natural_keys.append(
|
|
permission.natural_key()[1] + "." + permission.natural_key()[0],
|
|
)
|
|
return permission_natural_keys
|