From 2d8fe2898f670c4f65e59d4d960e4455b18530bd Mon Sep 17 00:00:00 2001 From: tonio Date: Tue, 14 Dec 2010 22:43:09 +0100 Subject: [PATCH] see #103 * Permissions update close #97 * Migration and fixtures update --- admin/fixtures/initial_data.json | 2 +- .../migrations/0006_auto__add_domainalias.py | 14 ++ admin/models.py | 5 + admin/views.py | 178 ++++++++++-------- 4 files changed, 117 insertions(+), 82 deletions(-) diff --git a/admin/fixtures/initial_data.json b/admin/fixtures/initial_data.json index dbe3919f0..c7d22a2a1 100644 --- a/admin/fixtures/initial_data.json +++ b/admin/fixtures/initial_data.json @@ -1 +1 @@ -[{"pk": 1, "model": "auth.group", "fields": {"name": "DomainAdmins", "permissions": [["add_mailbox", "admin", "mailbox"], ["change_mailbox", "admin", "mailbox"], ["delete_mailbox", "admin", "mailbox"], ["add_alias", "admin", "alias"], ["change_alias", "admin", "alias"], ["delete_alias", "admin", "alias"], ["view_domain", "admin", "domain"], ["view_mailboxes", "admin", "mailbox"], ["view_aliases", "admin", "alias"]]}}] +[{"pk": 1, "model": "auth.group", "fields": {"name": "DomainAdmins", "permissions": [["add_mailbox", "admin", "mailbox"], ["change_mailbox", "admin", "mailbox"], ["delete_mailbox", "admin", "mailbox"], ["add_alias", "admin", "alias"], ["change_alias", "admin", "alias"], ["delete_alias", "admin", "alias"], ["view_domain", "admin", "domain"], ["view_mailboxes", "admin", "mailbox"], ["view_aliases", "admin", "alias"], ["view_domaliases", "admin", "domainalias"], ["add_domainalias", "admin", "domainalias"], ["change_domainalias", "admin", "domainalias"], ["delete_domainalias", "admin", "domainalias"]]}}] diff --git a/admin/migrations/0006_auto__add_domainalias.py b/admin/migrations/0006_auto__add_domainalias.py index 27c2e9aea..c0422abf1 100644 --- a/admin/migrations/0006_auto__add_domainalias.py +++ b/admin/migrations/0006_auto__add_domainalias.py @@ -17,12 +17,26 @@ class Migration(SchemaMigration): )) db.send_create_signal('admin', ['DomainAlias']) + try: + grp = orm["auth.Group"].objects.get(name="DomainAdmins") + except: + pass + else: + for pcode in ["view_domaliases", "add_domainalias", "change_domainalias", + "delete_domainalias"]: + grp.permissions.add(orm["auth.Permissions"].objects.get(codename=pcode)) + grp.save() def backwards(self, orm): # Deleting model 'DomainAlias' db.delete_table('admin_domainalias') + grp = orm["auth.Group"].objects.get(name="DomainAdmins") + for pcode in ["view_domaliases", "add_domainalias", "change_domainalias", + "delete_domainalias"]: + grp.permissions.remove(orm["auth.Permissions"].objects.get(codename=pcode)) + grp.save() models = { 'admin.alias': { diff --git a/admin/models.py b/admin/models.py index c9b027f1a..adae61532 100644 --- a/admin/models.py +++ b/admin/models.py @@ -76,6 +76,11 @@ class DomainAlias(models.Model): enabled = models.BooleanField(_('enabled'), help_text=_("Check to activate this alias")) + class Meta: + permissions = ( + ("view_domaliases", "View domain aliases"), + ) + class Mailbox(models.Model): name = models.CharField(_('name'), max_length=100, help_text=_("First name and last name of mailbox owner")) diff --git a/admin/views.py b/admin/views.py index f8cb91b72..ed70bea18 100644 --- a/admin/views.py +++ b/admin/views.py @@ -68,86 +68,6 @@ def domains(request): domains=domains, counter=counters, deloptions=deloptions) -@login_required -def domaliases(request): - if request.GET.has_key("domid"): - domain = Domain.objects.get(pk=request.GET["domid"]) - domaliases = DomainAlias.objects.filter(target=request.GET["domid"]) - else: - domain = None - domaliases = DomainAlias.objects.all() - return render_domains_page(request, "domaliases", - domaliases=domaliases, domain=domain) - -@login_required -def newdomalias(request): - if request.method == "POST": - form = DomainAliasForm(request.POST) - error = None - if form.is_valid(): - domalias = form.save(commit=False) - if Domain.objects.filter(name=domalias.name): - error = _("A domain with this name already exists") - else: - try: - domalias.save() - except IntegrityError: - error = _("Alias with this name already exists") - else: - ctx = _ctx_ok(reverse(admin.views.domaliases)) - messages.info(request, _("Domain alias created"), fail_silently=True) - return HttpResponse(simplejson.dumps(ctx), - mimetype="application/json") - content = _render_to_string(request, "admin/newdomalias.html", { - "form" : form, "error" : error - }) - ctx = getctx("ko", content=content) - return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") - form = DomainAliasForm() - return _render(request, 'admin/newdomalias.html', { - "form" : form - }) - -@login_required -def editdomalias(request, alias_id): - domalias = DomainAlias.objects.get(pk=alias_id) - if request.method == "POST": - form = DomainAliasForm(request.POST, instance=domalias) - error = None - if form.is_valid(): - ndomalias = form.save(commit=False) - if Domain.objects.filter(name=ndomalias.name): - error = _("A domain with this name already exists") - else: - try: - ndomalias.save() - except IntegrityError: - error = _("Alias with this name already exists") - else: - ctx = _ctx_ok(reverse(admin.views.domaliases)) - messages.info(request, _("Domain alias updated"), fail_silently=True) - return HttpResponse(simplejson.dumps(ctx), - mimetype="application/json") - content = _render_to_string(request, "admin/editdomalias.html", { - "form" : form, "error" : error - }) - ctx = getctx("ko", content=content) - return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") - - form = DomainAliasForm(instance=domalias) - return _render(request, 'admin/editdomalias.html', { - "form" : form, "domalias" : domalias - }) - -@login_required -@permission_required("admin.delete_domalias") -def deldomalias(request): - selection = request.GET["selection"].split(",") - DomainAlias.objects.filter(id__in=selection).delete() - messages.info(request, _("Domain alias(es) deleted"), fail_silently=True) - return HttpResponse(simplejson.dumps(_ctx_ok("")), - mimetype="application/json") - @login_required @permission_required("admin.add_domain") def newdomain(request): @@ -232,6 +152,97 @@ def deldomain(request): ctx = getctx("ko", error=error) return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") +@login_required +@permission_required("admin.view_domaliases") +def domaliases(request): + if request.GET.has_key("domid"): + domain = Domain.objects.get(pk=request.GET["domid"]) + domaliases = DomainAlias.objects.filter(target=request.GET["domid"]) + else: + domain = None + domaliases = DomainAlias.objects.all() + return render_domains_page(request, "domaliases", + domaliases=domaliases, domain=domain) + +@login_required +@good_domain +@permission_required("admin.add_domainalias") +def newdomalias(request): + if request.method == "POST": + form = DomainAliasForm(request.POST) + error = None + if form.is_valid(): + domalias = form.save(commit=False) + if Domain.objects.filter(name=domalias.name): + error = _("A domain with this name already exists") + else: + try: + domalias.save() + except IntegrityError: + error = _("Alias with this name already exists") + else: + ctx = _ctx_ok(reverse(admin.views.domaliases)) + messages.info(request, _("Domain alias created"), fail_silently=True) + return HttpResponse(simplejson.dumps(ctx), + mimetype="application/json") + content = _render_to_string(request, "admin/newdomalias.html", { + "form" : form, "error" : error + }) + ctx = getctx("ko", content=content) + return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") + form = DomainAliasForm() + if not request.user.is_superuser: + form.fields["target"].queryset = \ + Domain.objects.filter(mailbox__user__pk=request.user.id) + if request.GET.has_key("domid"): + form.fields["target"].initial = request.GET["domid"] + return _render(request, 'admin/newdomalias.html', { + "form" : form + }) + +@login_required +@good_domain +@permission_required("admin.change_domainalias") +def editdomalias(request, alias_id): + domalias = DomainAlias.objects.get(pk=alias_id) + if request.method == "POST": + form = DomainAliasForm(request.POST, instance=domalias) + error = None + if form.is_valid(): + ndomalias = form.save(commit=False) + if Domain.objects.filter(name=ndomalias.name): + error = _("A domain with this name already exists") + else: + try: + ndomalias.save() + except IntegrityError: + error = _("Alias with this name already exists") + else: + ctx = _ctx_ok(reverse(admin.views.domaliases)) + messages.info(request, _("Domain alias updated"), fail_silently=True) + return HttpResponse(simplejson.dumps(ctx), + mimetype="application/json") + content = _render_to_string(request, "admin/editdomalias.html", { + "form" : form, "error" : error + }) + ctx = getctx("ko", content=content) + return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") + + form = DomainAliasForm(instance=domalias) + return _render(request, 'admin/editdomalias.html', { + "form" : form, "domalias" : domalias + }) + +@login_required +@good_domain +@permission_required("admin.delete_domainalias") +def deldomalias(request): + selection = request.GET["selection"].split(",") + DomainAlias.objects.filter(id__in=selection).delete() + messages.info(request, _("Domain alias(es) deleted"), fail_silently=True) + return HttpResponse(simplejson.dumps(_ctx_ok("")), + mimetype="application/json") + @login_required @good_domain @permission_required("admin.view_mailboxes") @@ -281,6 +292,9 @@ def newmailbox(request): return HttpResponse(simplejson.dumps(ctx), mimetype="application/json") form = MailboxForm() + if not request.user.is_superuser: + form.fields["domain"].queryset = \ + Domain.objects.filter(mailbox__user__pk=request.user.id) if request.GET.has_key("domid"): form.fields["domain"].initial = request.GET["domid"] return _render(request, "admin/newmailbox.html", { @@ -346,7 +360,7 @@ def delmailbox(request): keepdir = False for mb in Mailbox.objects.filter(id__in=selection): events.raiseEvent("DeleteMailbox", mbox=mb) - mb.delete()#keepdir=keepdir) + mb.delete(keepdir=keepdir) messages.info(request, _("Mailbox deleted"), fail_silently=True) ctx = _ctx_ok("") else: @@ -394,6 +408,8 @@ def newmbalias(request): form = AliasForm(domain=Domain.objects.get(pk=request.GET["domid"])) else: form = AliasForm() + if request.GET.has_key("mbid"): + form.fields["mboxes"].initial = request.GET["mbid"] return _render(request, 'admin/newmbalias.html', { "form" : form, "noerrors" : True })