From 356ee3db1b98aa052316009340c358d3eba2aa80 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Fri, 22 Jun 2012 17:05:53 +0200 Subject: [PATCH] Domains admins can now access the *domains* section. see #274 --- modoboa/admin/fixtures/initial_data.json | 2 +- modoboa/admin/forms.py | 22 ++++++------- modoboa/admin/templatetags/admin_extras.py | 37 ++++++++++++++-------- modoboa/admin/views.py | 2 +- modoboa/lib/templatetags/libextras.py | 2 +- modoboa/templates/common/menulist.html | 2 +- 6 files changed, 39 insertions(+), 28 deletions(-) diff --git a/modoboa/admin/fixtures/initial_data.json b/modoboa/admin/fixtures/initial_data.json index 55d095bb8..852a5e59d 100644 --- a/modoboa/admin/fixtures/initial_data.json +++ b/modoboa/admin/fixtures/initial_data.json @@ -1 +1 @@ -[{"pk": 1, "model": "auth.group", "fields": {"name": "DomainAdmins", "permissions": [["add_user", "auth", "user"], ["change_user", "auth", "user"], ["delete_user", "auth", "user"], ["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_mailboxes", "admin", "mailbox"], ["view_aliases", "admin", "alias"], ["view_domaliases", "admin", "domainalias"], ["add_domainalias", "admin", "domainalias"], ["change_domainalias", "admin", "domainalias"], ["delete_domainalias", "admin", "domainalias"]]}},{"pk": 2, "model": "auth.group", "fields": {"name": "SimpleUsers", "permissions": []}},{"pk": 1, "model": "auth.user", "fields": {"username": "admin", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": false, "last_login": "2012-01-26 15:19:25", "groups": [], "user_permissions": [], "password": "{CRYPT}dTTsGDkA5ZHKg", "email": "", "date_joined": "2012-01-26 15:19:25"}},{"pk": 1, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 1, "content_type": ["admin", "user"], "object_id": 1}}] +[{"pk": 1, "model": "auth.group", "fields": {"name": "DomainAdmins", "permissions": [["add_user", "auth", "user"], ["change_user", "auth", "user"], ["delete_user", "auth", "user"], ["view_domains", "admin", "domain"], ["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_mailboxes", "admin", "mailbox"], ["view_aliases", "admin", "alias"], ["view_domaliases", "admin", "domainalias"], ["add_domainalias", "admin", "domainalias"], ["change_domainalias", "admin", "domainalias"], ["delete_domainalias", "admin", "domainalias"]]}},{"pk": 2, "model": "auth.group", "fields": {"name": "SimpleUsers", "permissions": []}},{"pk": 1, "model": "auth.user", "fields": {"username": "admin", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": false, "last_login": "2012-01-26 15:19:25", "groups": [], "user_permissions": [], "password": "{CRYPT}dTTsGDkA5ZHKg", "email": "", "date_joined": "2012-01-26 15:19:25"}},{"pk": 1, "model": "admin.objectaccess", "fields": {"is_owner": false, "user": 1, "content_type": ["admin", "user"], "object_id": 1}}] diff --git a/modoboa/admin/forms.py b/modoboa/admin/forms.py index eae64bd93..4499ef6f5 100644 --- a/modoboa/admin/forms.py +++ b/modoboa/admin/forms.py @@ -101,10 +101,13 @@ class DomainFormGeneral(forms.ModelForm, DynamicForm): class DomainForm(TabForms): def __init__(self, user, *args, **kwargs): self.user = user - self.forms = [ - dict(id="general", title=_("General"), formtpl="admin/domain_general_form.html", - cls=DomainFormGeneral, mandatory=True), - ] + self.forms = [] + if user.has_perm("admin.change_domain"): + self.forms.append(dict( + id="general", title=_("General"), formtpl="admin/domain_general_form.html", + cls=DomainFormGeneral, mandatory=True + )) + cbargs = [user] if kwargs.has_key("instances"): cbargs += [kwargs["instances"]["general"]] @@ -115,14 +118,11 @@ class DomainForm(TabForms): def save(self, user): """Custom save method - As forms interact with each other, it is simpler to make - custom code to save them. + As forms interact with each other, it is easier to make custom + code to save them. """ - self.forms[0]["instance"].save(user) - if len(self.forms) <= 1: - return - for f in self.forms[1:]: - f["instance"].save() + for f in self.forms: + f["instance"].save(user) class DlistForm(forms.ModelForm, DynamicForm): email = forms.EmailField( diff --git a/modoboa/admin/templatetags/admin_extras.py b/modoboa/admin/templatetags/admin_extras.py index c8deece6a..72b4a4cfb 100644 --- a/modoboa/admin/templatetags/admin_extras.py +++ b/modoboa/admin/templatetags/admin_extras.py @@ -62,6 +62,9 @@ def settings_menu(selection, user): @register.simple_tag def domains_menu(selection, user): + if not user.has_perm("admin.add_domain"): + return "" + entries = [ {"name" : "newdomain", "label" : _("Add domain"), @@ -76,6 +79,7 @@ def domains_menu(selection, user): "modal" : True, "modalcb" : "importform_cb"} ] + return render_to_string('common/menu.html', { "entries" : entries, "css" : "nav nav-list", @@ -126,13 +130,14 @@ def identities_menu(user): @register.simple_tag def domain_actions(user, domid): - actions = [ - {"name" : "deldomain", - "url" : reverse(admin.views.deldomain) + "?selection=%s" % domid, - "img" : "icon-trash"}, - ] - - return render_actions(actions) + if user.has_perm("admin.delete_domain"): + actions = [ + {"name" : "deldomain", + "url" : reverse(admin.views.deldomain) + "?selection=%s" % domid, + "img" : "icon-trash"}, + ] + return render_actions(actions) + return "---" @register.simple_tag def identity_actions(user, iid): @@ -204,16 +209,22 @@ def param(app, definition): if definition["type"] == "text": result += "" \ % (name, name, value) + + if definition["type"] == "list_yesno": + for v in [("yes", _("Yes")), ("no", _("No"))]: + checked = "checked" if value == v[0] else "" + result += """ +""" % dict(id=name, value=v[0], label=v[1], checked=checked) - if definition["type"] in ["list", "list_yesno"]: + if definition["type"] == "list": result += """