From ec672e57bcfb3267b246bd12dbe8f3ada2c36599 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Thu, 3 May 2012 18:07:01 +0200 Subject: [PATCH] wip: UI refactoring * Activate by default the 'simple user' mode for domain administrators (when creating a new accoun) * Don't forget to grant access to objects created by domain admins to super admins see #204 --- admin/models.py | 2 +- lib/permissions.py | 13 ++++++++++--- static/js/admin.js | 36 ++++++++++++++++++++++++------------ 3 files changed, 35 insertions(+), 16 deletions(-) diff --git a/admin/models.py b/admin/models.py index cc96d923a..3d2d1416b 100644 --- a/admin/models.py +++ b/admin/models.py @@ -202,7 +202,7 @@ class User(DUser): def get_identities(self): from modoboa.lib.permissions import get_content_type - + userct = get_content_type(self) alct = get_content_type(Alias) return self.objectaccess_set.filter(content_type__in=[userct, alct]) diff --git a/lib/permissions.py b/lib/permissions.py index d82201ca1..98b99a256 100644 --- a/lib/permissions.py +++ b/lib/permissions.py @@ -40,6 +40,9 @@ def grant_access_to_object(user, obj, is_owner=False): * He is the owner (he's just created the object) * He is going to administrate the object (but he is not the owner) + If the user isn't a *super user* but is the owner, we also grant + access to this object to all super admins. + :param user: a ``User`` object :param obj: an admin. object (Domain, Mailbox, ...) :param is_owner: the user is the unique object's owner @@ -55,9 +58,13 @@ def grant_access_to_object(user, obj, is_owner=False): return try: - objaccess = ObjectAccess(user=user, content_type=ct, - object_id=obj.id, is_owner=is_owner) - objaccess.save() + ObjectAccess.objects.create(user=user, content_type=ct, + object_id=obj.id, is_owner=is_owner) + if is_owner and not user.is_superuser: + from modoboa.admin.models import User + for su in User.objects.filter(is_superuser=True): + ObjectAccess.objects.create(user=su, content_type=ct, object_id=obj.id) + except IntegrityError, e: raise ModoboaException(_("Failed to grant access (%s)" % str(e))) diff --git a/static/js/admin.js b/static/js/admin.js index 86a74db5f..de27a6e28 100644 --- a/static/js/admin.js +++ b/static/js/admin.js @@ -21,20 +21,28 @@ function domainform_cb() { }); } +function simpleuser_mode() { + $("#id_username").autocompleter({ + from_character: "@", + choices: get_domains_list + }); + $("#id_email").addClass("disabled") + .attr("readonly", "") + .autocompleter("unbind"); +} + +function normal_mode() { + $("#id_email").removeClass("disabled") + .attr("readonly", null) + .autocompleter("listen"); +} + function generalform_init() { $("#id_role").change(function(e) { if ($(this).attr("value") == "SimpleUsers") { - $("#id_username").autocompleter({ - from_character: "@", - choices: get_domains_list - }); - $("#id_email").addClass("disabled") - .attr("readonly", "") - .autocompleter("unbind"); + simpleuser_mode(); } else { - $("#id_email").removeClass("disabled") - .attr("readonly", null) - .autocompleter("listen"); + normal_mode(); } }); } @@ -45,7 +53,11 @@ function mailform_init() { from_character: "@", choices: get_domains_list }); - $("#id_role").trigger("change"); + if ($("#id_role").length) { + $("#id_role").trigger("change"); + } else { + simpleuser_mode(); + } $("#id_domains") .autocompleter({ choices: get_domains_list @@ -60,7 +72,7 @@ function accountform_init() { } function mailform_prefill() { - if ($("#id_role").attr("value") == "SimpleUsers") { + if (!$("#id_role").length || $("#id_role").attr("value") == "SimpleUsers") { $("#id_email").attr("value", $("#id_username").attr("value")); } }