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 += """