diff --git a/modoboa/admin/handlers.py b/modoboa/admin/handlers.py index f73996c71..9ccac780a 100644 --- a/modoboa/admin/handlers.py +++ b/modoboa/admin/handlers.py @@ -254,7 +254,7 @@ def admin_menu(sender, location, user, **kwargs): if location != "top_menu": return [] entries = [] - if user.has_perm("admin.view_domains"): + if user.has_perm("admin.view_domain"): entries += [ {"name": "domains", "url": reverse("admin:domain_list"), diff --git a/modoboa/admin/migrations/0001_initial.py b/modoboa/admin/migrations/0001_initial.py index afa54f6ba..09a6edb57 100644 --- a/modoboa/admin/migrations/0001_initial.py +++ b/modoboa/admin/migrations/0001_initial.py @@ -19,7 +19,6 @@ class Migration(migrations.Migration): ], options={ 'ordering': ['address'], - 'permissions': (('view_aliases', 'View aliases'),), }, bases=(models.Model,), ), @@ -47,7 +46,6 @@ class Migration(migrations.Migration): ], options={ 'ordering': ['name'], - 'permissions': (('view_domain', 'View domain'), ('view_domains', 'View domains')), }, bases=(models.Model,), ), @@ -58,9 +56,6 @@ class Migration(migrations.Migration): ('name', models.CharField(help_text='The alias name', unique=True, max_length=100, verbose_name='name')), ('enabled', models.BooleanField(default=True, help_text='Check to activate this alias', verbose_name='enabled')), ], - options={ - 'permissions': (('view_domaliases', 'View domain aliases'),), - }, bases=(models.Model,), ), migrations.CreateModel( @@ -71,9 +66,6 @@ class Migration(migrations.Migration): ('quota', models.PositiveIntegerField()), ('use_domain_quota', models.BooleanField(default=False)), ], - options={ - 'permissions': (('view_mailboxes', 'View mailboxes'),), - }, bases=(models.Model,), ), migrations.CreateModel( diff --git a/modoboa/admin/migrations/0015_rename_view_permissions.py b/modoboa/admin/migrations/0015_rename_view_permissions.py new file mode 100644 index 000000000..744469a87 --- /dev/null +++ b/modoboa/admin/migrations/0015_rename_view_permissions.py @@ -0,0 +1,44 @@ +# Generated by Django 2.1.15 on 2020-01-13 09:22 + +import sys + +from django.db import IntegrityError, migrations, transaction + +VIEW_PERMISSION_CODENAMES = { + 'view_aliases': 'view_alias', + 'view_domaliases': 'view_domainalias', + 'view_mailboxes': 'view_mailbox', +} + + +def rename_view_permissions(apps, schema_editor): + Permission = apps.get_model('auth', 'Permission') + db_alias = schema_editor.connection.alias + # Iterate over permissions and try to rename the codename + for perm in Permission.objects.using(db_alias).filter( + codename__in=VIEW_PERMISSION_CODENAMES.keys() + ): + codename = perm.codename + try: + with transaction.atomic(): + perm.codename = VIEW_PERMISSION_CODENAMES[perm.codename] + perm.save() + except IntegrityError: + print( + ( + "Unable to rename '{}' to '{}', a permission with this " + "codename already exists.".format(codename, perm.codename) + ), + file=sys.stderr, + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('admin', '0014_auto_20181017_1628'), + ] + + operations = [ + migrations.RunPython(rename_view_permissions), + ] diff --git a/modoboa/admin/models/alias.py b/modoboa/admin/models/alias.py index fb2d959b4..468b335df 100644 --- a/modoboa/admin/models/alias.py +++ b/modoboa/admin/models/alias.py @@ -48,9 +48,6 @@ class Alias(AdminObject): _objectname = "MailboxAlias" class Meta: - permissions = ( - ("view_aliases", "View aliases"), - ) ordering = ["address"] unique_together = (("address", "internal"), ) app_label = "admin" diff --git a/modoboa/admin/models/domain.py b/modoboa/admin/models/domain.py index c040ad260..eb478f3b3 100644 --- a/modoboa/admin/models/domain.py +++ b/modoboa/admin/models/domain.py @@ -63,10 +63,6 @@ class Domain(AdminObject): dkim_private_key_path = models.CharField(max_length=254, blank=True) class Meta: - permissions = ( - ("view_domain", "View domain"), - ("view_domains", "View domains"), - ) ordering = ["name"] app_label = "admin" diff --git a/modoboa/admin/models/domain_alias.py b/modoboa/admin/models/domain_alias.py index 055f0ff1e..6caa0a9cd 100644 --- a/modoboa/admin/models/domain_alias.py +++ b/modoboa/admin/models/domain_alias.py @@ -49,9 +49,6 @@ class DomainAlias(AdminObject): objects = DomainAliasManager() class Meta: - permissions = ( - ("view_domaliases", "View domain aliases"), - ) app_label = "admin" def __str__(self): diff --git a/modoboa/admin/models/mailbox.py b/modoboa/admin/models/mailbox.py index 21ede9a5f..df3e178ff 100644 --- a/modoboa/admin/models/mailbox.py +++ b/modoboa/admin/models/mailbox.py @@ -104,9 +104,6 @@ class Mailbox(AdminObject): objects = MailboxManager() class Meta: - permissions = ( - ("view_mailboxes", "View mailboxes"), - ) app_label = "admin" def __init__(self, *args, **kwargs): diff --git a/modoboa/admin/views/domain.py b/modoboa/admin/views/domain.py index 29550c8fc..89b151cb5 100644 --- a/modoboa/admin/views/domain.py +++ b/modoboa/admin/views/domain.py @@ -34,8 +34,8 @@ def index(request): @login_required @user_passes_test( - lambda u: u.has_perm("admin.view_domains") or - u.has_perm("admin.view_mailboxes") + lambda u: u.has_perm("admin.view_domain") or + u.has_perm("admin.view_mailbox") ) def _domains(request): sort_order, sort_dir = get_sort_order(request.GET, "name") @@ -92,8 +92,8 @@ def _domains(request): @login_required @ensure_csrf_cookie def domains(request, tplname="admin/domains.html"): - if not request.user.has_perm("admin.view_domains"): - if request.user.has_perm("admin.view_mailboxes"): + if not request.user.has_perm("admin.view_domain"): + if request.user.has_perm("admin.view_mailbox"): return HttpResponseRedirect( reverse("admin:identity_list") ) @@ -113,8 +113,8 @@ def domains(request, tplname="admin/domains.html"): @login_required @user_passes_test( - lambda u: u.has_perm("admin.view_domains") or - u.has_perm("admin.view_mailboxes") or + lambda u: u.has_perm("admin.view_domain") or + u.has_perm("admin.view_mailbox") or u.has_perm("admin.add_domain") ) def get_next_page(request): @@ -170,7 +170,7 @@ def newdomain(request): @login_required -@permission_required("admin.view_domains") +@permission_required("admin.view_domain") @reversion.create_revision() def editdomain(request, dom_id): """Edit domain view.""" diff --git a/modoboa/core/constants.py b/modoboa/core/constants.py index c0db2af39..99a0b0b2b 100644 --- a/modoboa/core/constants.py +++ b/modoboa/core/constants.py @@ -59,16 +59,15 @@ PERMISSIONS = { ["core", "user", "add_user"], ["core", "user", "change_user"], ["core", "user", "delete_user"], - ["admin", "domain", "view_domains"], ["admin", "domain", "view_domain"], ["admin", "mailbox", "add_mailbox"], ["admin", "mailbox", "change_mailbox"], ["admin", "mailbox", "delete_mailbox"], - ["admin", "mailbox", "view_mailboxes"], + ["admin", "mailbox", "view_mailbox"], ["admin", "alias", "add_alias"], ["admin", "alias", "change_alias"], ["admin", "alias", "delete_alias"], - ["admin", "alias", "view_aliases"], + ["admin", "alias", "view_alias"], ["admin", "senderaddress", "add_senderaddress"], ["admin", "senderaddress", "change_senderaddress"], ["admin", "senderaddress", "delete_senderaddress"], @@ -77,23 +76,21 @@ PERMISSIONS = { ["core", "user", "add_user"], ["core", "user", "change_user"], ["core", "user", "delete_user"], - ["admin", "domain", "view_domains"], - ["admin", "domain", "view_domain"], ["admin", "mailbox", "add_mailbox"], ["admin", "mailbox", "change_mailbox"], ["admin", "mailbox", "delete_mailbox"], - ["admin", "mailbox", "view_mailboxes"], + ["admin", "mailbox", "view_mailbox"], ["admin", "alias", "add_alias"], ["admin", "alias", "change_alias"], ["admin", "alias", "delete_alias"], - ["admin", "alias", "view_aliases"], + ["admin", "alias", "view_alias"], ["admin", "senderaddress", "add_senderaddress"], ["admin", "senderaddress", "change_senderaddress"], ["admin", "senderaddress", "delete_senderaddress"], - ["admin", "domain", "view_domains"], ["admin", "domain", "add_domain"], ["admin", "domain", "change_domain"], ["admin", "domain", "delete_domain"], + ["admin", "domain", "view_domain"], ["admin", "domainalias", "add_domainalias"], ["admin", "domainalias", "change_domainalias"], ["admin", "domainalias", "delete_domainalias"], diff --git a/modoboa/core/views/base.py b/modoboa/core/views/base.py index 33f893f41..1c5378b34 100644 --- a/modoboa/core/views/base.py +++ b/modoboa/core/views/base.py @@ -16,7 +16,7 @@ def find_nextlocation(request, user): nextlocation = request.POST.get("next", request.GET.get("next")) condition = ( nextlocation and - is_safe_url(nextlocation, host=request.get_host()) + is_safe_url(nextlocation, request.get_host()) ) if condition: return nextlocation diff --git a/modoboa/templates/common/horizontal_select_option.html b/modoboa/templates/common/horizontal_select_option.html index 80f603bf9..78558af69 100644 --- a/modoboa/templates/common/horizontal_select_option.html +++ b/modoboa/templates/common/horizontal_select_option.html @@ -1,2 +1,2 @@ -{% if wrap_label %}{% endif %}{% include "django/forms/widgets/input.html" %}{% if wrap_label %} {{ widget.label }}{% endif %} \ No newline at end of file +{% if widget.wrap_label %}{% endif %}{% include "django/forms/widgets/input.html" %}{% if widget.wrap_label %} {{ widget.label }}{% endif %} diff --git a/requirements.txt b/requirements.txt index f41b24baa..92c9484a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -django>=2.0,<2.1 +django>=2.1,<2.2 django-braces==1.14.0 django-ckeditor==5.8.0 django-reversion==3.0.5