mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-23 06:38:40 +02:00
Manage domain and account resources.
This commit is contained in:
@@ -35,15 +35,24 @@ class CreateDomainAdminSerializer(serializers.Serializer):
|
||||
with_aliases = serializers.BooleanField(default=False)
|
||||
|
||||
|
||||
class DomainResourceSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for domain resource."""
|
||||
|
||||
class Meta:
|
||||
fields = ("name", "label", "max_value", "current_value", "usage")
|
||||
model = limits_models.DomainObjectLimit
|
||||
|
||||
|
||||
class DomainSerializer(v1_serializers.DomainSerializer):
|
||||
"""Domain serializer for v2 API."""
|
||||
|
||||
domain_admin = CreateDomainAdminSerializer(required=False, write_only=True)
|
||||
resources = DomainResourceSerializer(many=True, source="domainobjectlimit_set")
|
||||
transport = transport_serializers.TransportSerializer(required=False)
|
||||
|
||||
class Meta(v1_serializers.DomainSerializer.Meta):
|
||||
fields = v1_serializers.DomainSerializer.Meta.fields + (
|
||||
"domain_admin", "transport"
|
||||
"domain_admin", "resources", "transport"
|
||||
)
|
||||
|
||||
def validate(self, data):
|
||||
@@ -122,6 +131,7 @@ class DomainSerializer(v1_serializers.DomainSerializer):
|
||||
def update(self, instance, validated_data):
|
||||
"""Update domain and create/update transport."""
|
||||
transport_def = validated_data.pop("transport", None)
|
||||
resources = validated_data.pop("domainobjectlimit_set", None)
|
||||
super().update(instance, validated_data)
|
||||
if transport_def and instance.type == "relaydomain":
|
||||
transport = getattr(instance, "transport", None)
|
||||
@@ -138,6 +148,11 @@ class DomainSerializer(v1_serializers.DomainSerializer):
|
||||
if created:
|
||||
instance.transport = transport
|
||||
instance.save()
|
||||
if resources:
|
||||
for resource in resources:
|
||||
instance.domainobjectlimit_set.filter(
|
||||
name=resource["name"]
|
||||
).update(max_value=resource["max_value"])
|
||||
return instance
|
||||
|
||||
|
||||
@@ -253,7 +268,7 @@ class IdentitySerializer(serializers.Serializer):
|
||||
tags = TagSerializer(many=True)
|
||||
|
||||
|
||||
class ResourceSerializer(serializers.ModelSerializer):
|
||||
class AccountResourceSerializer(serializers.ModelSerializer):
|
||||
"""Serializer for user resource."""
|
||||
|
||||
class Meta:
|
||||
@@ -277,6 +292,8 @@ class AccountSerializer(v1_serializers.AccountSerializer):
|
||||
)
|
||||
|
||||
def get_resources(self, account):
|
||||
if account.role == 'SimpleUsers':
|
||||
return []
|
||||
resources = []
|
||||
for limit in account.userobjectlimit_set.all():
|
||||
tpl = limits_constants.DEFAULT_USER_LIMITS[limit.name]
|
||||
@@ -284,7 +301,7 @@ class AccountSerializer(v1_serializers.AccountSerializer):
|
||||
if account.role != tpl["required_role"]:
|
||||
continue
|
||||
resources.append(limit)
|
||||
return ResourceSerializer(resources, many=True).data
|
||||
return AccountResourceSerializer(resources, many=True).data
|
||||
|
||||
|
||||
class MailboxSerializer(serializers.ModelSerializer):
|
||||
|
||||
Reference in New Issue
Block a user