🚸(models) use a viewer role for MailDomainAccess
Rename member role to viewer role for MailDomainAccess. A viewer is only allowed to see list of mailboxes created for a domain. It makes more sense to name it viewer.
This commit is contained in:
@@ -25,7 +25,13 @@ class MailDomainAdmin(admin.ModelAdmin):
|
|||||||
class MailDomainAccessAdmin(admin.ModelAdmin):
|
class MailDomainAccessAdmin(admin.ModelAdmin):
|
||||||
"""Admin for mail domain accesses model."""
|
"""Admin for mail domain accesses model."""
|
||||||
|
|
||||||
list_display = ("user", "domain")
|
list_display = (
|
||||||
|
"user",
|
||||||
|
"domain",
|
||||||
|
"role",
|
||||||
|
"created_at",
|
||||||
|
"updated_at",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@admin.register(models.Mailbox)
|
@admin.register(models.Mailbox)
|
||||||
|
|||||||
@@ -6,6 +6,14 @@ from django.db import models
|
|||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
class MailDomainRoleChoices(models.TextChoices):
|
||||||
|
"""Defines the possible roles a user can have to access to a mail domain."""
|
||||||
|
|
||||||
|
VIEWER = "viewer", _("Viewer")
|
||||||
|
ADMIN = "administrator", _("Administrator")
|
||||||
|
OWNER = "owner", _("Owner")
|
||||||
|
|
||||||
|
|
||||||
class MailDomainStatusChoices(models.TextChoices):
|
class MailDomainStatusChoices(models.TextChoices):
|
||||||
"""Defines the possible statuses in which a mail domain can be."""
|
"""Defines the possible statuses in which a mail domain can be."""
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,9 @@ class MailDomainAccessFactory(factory.django.DjangoModelFactory):
|
|||||||
|
|
||||||
user = factory.SubFactory(core_factories.UserFactory)
|
user = factory.SubFactory(core_factories.UserFactory)
|
||||||
domain = factory.SubFactory(MailDomainFactory)
|
domain = factory.SubFactory(MailDomainFactory)
|
||||||
role = factory.fuzzy.FuzzyChoice([r[0] for r in core_models.RoleChoices.choices])
|
role = factory.fuzzy.FuzzyChoice(
|
||||||
|
[r[0] for r in enums.MailDomainRoleChoices.choices]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class MailboxFactory(factory.django.DjangoModelFactory):
|
class MailboxFactory(factory.django.DjangoModelFactory):
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.0.6 on 2024-08-02 15:11
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('mailbox_manager', '0006_maildomain_status'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='maildomainaccess',
|
||||||
|
name='role',
|
||||||
|
field=models.CharField(choices=[('viewer', 'Viewer'), ('administrator', 'Administrator'), ('owner', 'Owner')], default='viewer', max_length=20),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -9,9 +9,9 @@ from django.db import models
|
|||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from core.models import BaseModel, RoleChoices
|
from core.models import BaseModel
|
||||||
|
|
||||||
from mailbox_manager.enums import MailDomainStatusChoices
|
from mailbox_manager.enums import MailDomainRoleChoices, MailDomainStatusChoices
|
||||||
|
|
||||||
|
|
||||||
class MailDomain(BaseModel):
|
class MailDomain(BaseModel):
|
||||||
@@ -57,13 +57,16 @@ class MailDomain(BaseModel):
|
|||||||
except (MailDomainAccess.DoesNotExist, IndexError):
|
except (MailDomainAccess.DoesNotExist, IndexError):
|
||||||
role = None
|
role = None
|
||||||
|
|
||||||
is_owner_or_admin = role in [RoleChoices.OWNER, RoleChoices.ADMIN]
|
is_owner_or_admin = role in [
|
||||||
|
MailDomainRoleChoices.OWNER,
|
||||||
|
MailDomainRoleChoices.ADMIN,
|
||||||
|
]
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"get": bool(role),
|
"get": bool(role),
|
||||||
"patch": is_owner_or_admin,
|
"patch": is_owner_or_admin,
|
||||||
"put": is_owner_or_admin,
|
"put": is_owner_or_admin,
|
||||||
"delete": role == RoleChoices.OWNER,
|
"delete": role == MailDomainRoleChoices.OWNER,
|
||||||
"manage_accesses": is_owner_or_admin,
|
"manage_accesses": is_owner_or_admin,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +89,9 @@ class MailDomainAccess(BaseModel):
|
|||||||
blank=False,
|
blank=False,
|
||||||
)
|
)
|
||||||
role = models.CharField(
|
role = models.CharField(
|
||||||
max_length=20, choices=RoleChoices.choices, default=RoleChoices.MEMBER
|
max_length=20,
|
||||||
|
choices=MailDomainRoleChoices.choices,
|
||||||
|
default=MailDomainRoleChoices.VIEWER,
|
||||||
)
|
)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ def test_api_mail_domains__list_authenticated():
|
|||||||
str(access.domain.id)
|
str(access.domain.id)
|
||||||
for access in factories.MailDomainAccessFactory.create_batch(5, user=user)
|
for access in factories.MailDomainAccessFactory.create_batch(5, user=user)
|
||||||
}
|
}
|
||||||
factories.MailDomainFactory.create_batch(2) # Other teams
|
factories.MailDomainFactory.create_batch(2) # Other domains
|
||||||
factories.MailDomainAccessFactory.create_batch(2) # Other teams and accesses
|
factories.MailDomainAccessFactory.create_batch(2) # Other domains and accesses
|
||||||
|
|
||||||
response = client.get(
|
response = client.get(
|
||||||
"/api/v1.0/mail-domains/",
|
"/api/v1.0/mail-domains/",
|
||||||
|
|||||||
Reference in New Issue
Block a user