🚸(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:
Sabrina Demagny
2024-08-02 16:46:46 +02:00
parent e03ecb2d77
commit eba9fb2d09
6 changed files with 48 additions and 9 deletions

View File

@@ -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)

View File

@@ -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."""

View File

@@ -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):

View File

@@ -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),
),
]

View File

@@ -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:

View File

@@ -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/",