Bump Django to 2.1 and rename view permissions

See: https://docs.djangoproject.com/en/stable/releases/2.1/

The main change is the addition of a view permission. To prevent
redundancy, the custom and current `view_` permissions are renamed to
use the new ones - e.g. `view_aliases` is renamed to `view_alias`. Only
`view_domain` is used to check permissions and `view_domains` is not
deleted in case customizations have been made by user - in such case
a manual squash is needed.
This commit is contained in:
Jérôme Lebleu
2020-01-13 14:24:25 +01:00
parent 40e6dc838f
commit 8d1f1e58ae
12 changed files with 60 additions and 40 deletions
+1 -1
View File
@@ -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"),
-8
View File
@@ -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(
@@ -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),
]
-3
View File
@@ -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"
-4
View File
@@ -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"
-3
View File
@@ -49,9 +49,6 @@ class DomainAlias(AdminObject):
objects = DomainAliasManager()
class Meta:
permissions = (
("view_domaliases", "View domain aliases"),
)
app_label = "admin"
def __str__(self):
-3
View File
@@ -104,9 +104,6 @@ class Mailbox(AdminObject):
objects = MailboxManager()
class Meta:
permissions = (
("view_mailboxes", "View mailboxes"),
)
app_label = "admin"
def __init__(self, *args, **kwargs):
+7 -7
View File
@@ -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."""
+5 -8
View File
@@ -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"],
+1 -1
View File
@@ -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
@@ -1,2 +1,2 @@
{% if wrap_label %}<label{% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %}{% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %} class="radio-inline">{% endif %}{% include "django/forms/widgets/input.html" %}{% if wrap_label %} {{ widget.label }}</label>{% endif %}
{% if widget.wrap_label %}<label{% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %}{% if widget.attrs.id %} for="{{ widget.attrs.id }}"{% endif %} class="radio-inline">{% endif %}{% include "django/forms/widgets/input.html" %}{% if widget.wrap_label %} {{ widget.label }}</label>{% endif %}
+1 -1
View File
@@ -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