From 981540b2b5e2fe39adbf258575a9c67b24f2cfa3 Mon Sep 17 00:00:00 2001 From: tonio Date: Thu, 22 Oct 2009 18:31:43 +0200 Subject: [PATCH] It is now possible to delete a SuperAdmin permission. Postfix Autoreply plugin is not a real plugin... I've begun the conversion but it will cause a modification into the SQL schema and I don't know how to handle migrations yet... --- admin/views.py | 25 ++++++++++++++++++------- extensions/amavis_quarantine/main.py | 2 ++ extensions/postfix_autoreply/main.py | 15 +++++++++++++++ main/templatetags/main_extras.py | 7 ++----- templates/admin/permissions.html | 3 ++- 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/admin/views.py b/admin/views.py index c0f00e6d5..75709e029 100644 --- a/admin/views.py +++ b/admin/views.py @@ -9,7 +9,7 @@ from django.core.urlresolvers import reverse from django.contrib.auth.decorators \ import login_required, permission_required, user_passes_test from django.contrib.auth.models import User, Group -from mailng import admin +from mailng import admin, main from mailng.admin.models import Domain, Mailbox, Alias from forms import MailboxForm, DomainForm, AliasForm, PermissionForm from mailng.lib.authbackends import crypt_password @@ -26,8 +26,11 @@ def is_superuser(user): @login_required def domains(request): if not request.user.has_perm("admin.view_domains"): - mb = Mailbox.objects.get(user=request.user.id) - return mailboxes(request, dom_id=mb.domain.id) + if request.user.has_perm("admin.view_mailboxes"): + mb = Mailbox.objects.get(user=request.user.id) + return mailboxes(request, dom_id=mb.domain.id) + + return HttpResponseRedirect(reverse(main.views.index)) domains = Domain.objects.all() counters = {} @@ -362,8 +365,16 @@ def addpermission(request): @login_required @user_passes_test(lambda u: u.is_superuser) def deletepermission(request, mbox_id, group): - mbox = Mailbox.objects.get(pk=mbox_id) - grp = Group.objects.get(name=group) - mbox.user.groups.remove(grp) - mbox.user.save() + if group == "SuperAdmins": + user = User.objects.get(pk=mbox_id) + if user.username == "admin": + request.user.message_set.create(message=_("admin is intouchable!!")) + else: + user.is_superuser = False + user.save() + else: + mbox = Mailbox.objects.get(pk=mbox_id) + grp = Group.objects.get(name=group) + mbox.user.groups.remove(grp) + mbox.user.save() return HttpResponseRedirect(reverse(admin.views.settings)) diff --git a/extensions/amavis_quarantine/main.py b/extensions/amavis_quarantine/main.py index d57ea5f6a..e6c2eb731 100644 --- a/extensions/amavis_quarantine/main.py +++ b/extensions/amavis_quarantine/main.py @@ -42,6 +42,8 @@ def urls(): include('mailng.extensions.amavis_quarantine.urls')) def menu(**kwargs): + if kwargs["target"] != "user_menu_box": + return [] return [ {"name" : _("Quarantine"), "url" : reverse(index), diff --git a/extensions/postfix_autoreply/main.py b/extensions/postfix_autoreply/main.py index ad9793cb1..0e5b51940 100644 --- a/extensions/postfix_autoreply/main.py +++ b/extensions/postfix_autoreply/main.py @@ -7,7 +7,10 @@ This module provides a way to integrate MailNG auto-reply functionality into Postfix. """ +from django.core.urlresolvers import reverse +from django.utils.translation import ugettext as _ from mailng.lib import events +from mailng import main from models import Transport, Alias def init(): @@ -17,9 +20,21 @@ def init(): events.register("DeleteMailbox", onDeleteMailbox) events.register("ModifyMailbox", onModifyMailbox) + events.register("UserMenuDisplay", menu) + def urls(): return () +def menu(**kwargs): + if kwargs["target"] != "user_menu_bar": + return [] + return [ + {"name" : "autoreply", + "url" : reverse(main.views.autoreply), + "img" : "/static/pics/auto-reply.png", + "label" : _("Auto-reply message")} + ] + def onCreateDomain(**kwargs): dom = kwargs["dom"] transport = Transport() diff --git a/main/templatetags/main_extras.py b/main/templatetags/main_extras.py index 2dce791aa..152623139 100644 --- a/main/templatetags/main_extras.py +++ b/main/templatetags/main_extras.py @@ -10,10 +10,6 @@ register = template.Library() @register.simple_tag def menu(selection, perms): entries = [ - {"name" : "autoreply", - "url" : reverse(main.views.autoreply), - "img" : "/static/pics/auto-reply.png", - "label" : _("Auto-reply message")}, {"name" : "changepwd", "url" : reverse(main.views.changepassword), "img" : "/static/pics/edit.png", @@ -21,6 +17,7 @@ def menu(selection, perms): "class" : "boxed", "rel" : "{handler:'iframe',size:{x:350,y:220}}"} ] + entries += events.raiseQueryEvent("UserMenuDisplay", target="user_menu_bar") return render_to_string('main/menu.html', {"selection" : selection, "entries" : entries, @@ -28,6 +25,6 @@ def menu(selection, perms): @register.simple_tag def loadextmenu(perms): - menu = events.raiseQueryEvent("UserMenuDisplay") + menu = events.raiseQueryEvent("UserMenuDisplay", target="user_menu_box") return render_to_string('main/menulist.html', {"menu" : menu, "perms" : perms}) diff --git a/templates/admin/permissions.html b/templates/admin/permissions.html index dcec7fe80..094237642 100644 --- a/templates/admin/permissions.html +++ b/templates/admin/permissions.html @@ -19,7 +19,8 @@ {% for admin in admins %} - + {% url admin.views.deletepermission admin.id "SuperAdmins" as del_url %} + {{ admin.first_name }} {{ admin.last_name }} {{ admin.username }}