mirror of
https://github.com/jwinterm/modoboa.git
synced 2026-10-18 05:51:26 +02:00
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:
@@ -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"),
|
||||
|
||||
@@ -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),
|
||||
]
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -49,9 +49,6 @@ class DomainAlias(AdminObject):
|
||||
objects = DomainAliasManager()
|
||||
|
||||
class Meta:
|
||||
permissions = (
|
||||
("view_domaliases", "View domain aliases"),
|
||||
)
|
||||
app_label = "admin"
|
||||
|
||||
def __str__(self):
|
||||
|
||||
@@ -104,9 +104,6 @@ class Mailbox(AdminObject):
|
||||
objects = MailboxManager()
|
||||
|
||||
class Meta:
|
||||
permissions = (
|
||||
("view_mailboxes", "View mailboxes"),
|
||||
)
|
||||
app_label = "admin"
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
|
||||
@@ -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."""
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user