wip: Resellers and limits

* A new limit has been added : the maximum number of domain admins a user can create
* Code simplification

see #105
This commit is contained in:
Antoine Nguyen
2012-02-01 17:45:38 +01:00
parent eb37c48109
commit 027d77f949
8 changed files with 47 additions and 46 deletions
+20 -21
View File
@@ -295,15 +295,14 @@ class DatesAware(models.Model):
ObjectDates.set_for_object(self)
super(DatesAware, self).save(*args, **kwargs)
def __creation(self):
@property
def creation(self):
return self.dates.creation
def __last_modification(self):
@property
def last_modification(self):
return self.dates.last_modification
creation = property(__creation)
last_modification = property(__last_modification)
class Domain(DatesAware):
name = models.CharField(ugettext_noop('name'), max_length=100, unique=True,
help_text=ugettext_noop("The domain name"))
@@ -317,14 +316,14 @@ class Domain(DatesAware):
("view_domain", "View domain"),
("view_domains", "View domains"),
)
def __domainalias_count(self):
@property
def domainalias_count(self):
return len(self.domainalias_set.all())
domainalias_count = property(__domainalias_count)
def __mailbox_count(self):
@property
def mailbox_count(self):
return len(self.mailbox_set.all())
mailbox_count = property(__mailbox_count)
def create_dir(self):
if parameters.get_admin("CREATE_DIRECTORIES") == "yes":
@@ -407,25 +406,25 @@ class Mailbox(DatesAware):
self.mdirroot += '/'
def __str__(self):
return self.full_address()
return self.full_address
@property
def full_address(self):
return "%s@%s" % (self.address, self.domain.name)
def __enabled(self):
@property
def enabled(self):
return self.user.is_active
enabled = property(__enabled)
def __full_path(self):
@property
def full_path(self):
path = os.path.join(parameters.get_admin("STORAGE_PATH"),
self.domain.name, self.address)
return os.path.abspath(path)
full_path = property(__full_path)
def __alias_count(self):
@property
def alias_count(self):
return len(self.alias_set.all())
alias_count = property(__alias_count)
def create_dir(self):
if parameters.get_admin("CREATE_DIRECTORIES") == "yes":
@@ -607,15 +606,15 @@ class Alias(DatesAware):
("view_aliases", "View aliases"),
)
def __full_address(self):
@property
def full_address(self):
return "%s@%s" % (self.address, self.domain.name)
full_address = property(__full_address)
def __targets(self):
@property
def targets(self):
ret = "<br/>".join(map(lambda m: str(m), self.mboxes.all()))
ret += "<br/>" + self.repr_extmboxes()
return ret
targets = property(__targets)
def save(self, int_targets, ext_targets, *args, **kwargs):
if len(ext_targets):
+6 -5
View File
@@ -70,7 +70,7 @@ def _validate_domain(request, form, successmsg, commonctx,
@permission_required("admin.add_domain")
@transaction.commit_on_success
def newdomain(request, tplname="admin/adminform.html"):
events.raiseEvent("CanCreateDomain", request.user)
events.raiseEvent("CanCreate", request.user, "domains")
def newdomain_cb(user, domain):
grant_access_to_object(user, domain, is_owner=True)
events.raiseEvent("CreateDomain", user, domain)
@@ -152,7 +152,7 @@ def domaliases(request):
@permission_required("admin.add_domainalias")
@transaction.commit_on_success
def newdomalias(request, tplname="admin/adminform.html"):
events.raiseEvent("CanCreateDomainAlias", request.user)
events.raiseEvent("CanCreate", request.user, "domain_aliases")
commonctx = {"title" : _("New domain alias"),
"submit_label" : _("Create"),
"action" : reverse(newdomalias),
@@ -275,7 +275,7 @@ def mailboxes_search(request):
@permission_required("admin.add_mailbox")
@transaction.commit_on_success
def newmailbox(request, tplname="admin/adminform.html"):
events.raiseEvent("CanCreateMailbox", request.user)
events.raiseEvent("CanCreate", request.user, "mailboxes")
commonctx = {"title" : _("New mailbox"),
"submit_label" : _("Create"),
"action" : reverse(newmailbox),
@@ -423,7 +423,7 @@ def _validate_mbalias(request, form, successmsg, tplname, commonctx, callback=No
@permission_required("admin.add_alias")
@transaction.commit_on_success
def newmbalias(request, tplname="admin/mbaliasform.html"):
events.raiseEvent("CanCreateMailboxAlias", request.user)
events.raiseEvent("CanCreate", request.user, "mailbox_aliases")
commonctx = {"title" : _("New mailbox alias"),
"submit_label" : _("Create"),
"action" : reverse(newmbalias),
@@ -496,7 +496,7 @@ def permissions(request, tplname='admin/permissions.html'):
permtables += [
{"id" : "domain_admins",
"title" : _("Domain administrators"),
"rel" : "350 250",
"rel" : "350 100",
"content" : DomainAdminsPerms().get(request)}
]
@@ -515,6 +515,7 @@ def add_permission(request):
else:
pobj = pclass()
if request.method == "GET":
events.raiseEvent("CanCreate", request.user, role)
return pobj.get_add_form(request)
status, data = pobj.add(request)
if not status:
+11 -15
View File
@@ -40,9 +40,6 @@ def dec_limit(user, lname):
except LimitsPool.DoesNotExist:
pass
@events.observe('CanCreateDomain')
def check_domains_limit(user):
check_limit(user, 'domains_limit')
@events.observe('CreateDomain')
def inc_nb_domains(user, domain):
@@ -59,10 +56,6 @@ def dec_nb_domains(domain):
for mbalias in domain.alias_set.all():
dec_nb_mbaliases(mbalias)
@events.observe('CanCreateDomainAlias')
def check_domaliases_limit(user):
check_limit(user, 'domain_aliases_limit')
@events.observe('DomainAliasCreated')
def inc_nb_domaliases(user, domalias):
inc_limit(user, 'domain_aliases_limit')
@@ -72,10 +65,6 @@ def dec_nb_domaliases(domainalias):
owner = get_object_owner(domainalias)
dec_limit(owner, 'domain_aliases_limit')
@events.observe('CanCreateMailbox')
def check_mboxes_limit(user):
check_limit(user, 'mailboxes_limit')
@events.observe('CreateMailbox')
def inc_nb_mailboxes(user, mailbox):
inc_limit(user, 'mailboxes_limit')
@@ -85,10 +74,6 @@ def dec_nb_mailboxes(mailbox):
owner = get_object_owner(mailbox)
dec_limit(owner, 'mailboxes_limit')
@events.observe('CanCreateMailboxAlias')
def check_mbaliases_limit(user):
check_limit(user, 'mailbox_aliases_limit')
@events.observe('MailboxAliasCreated')
def inc_nb_mbaliases(user, mailboxalias):
inc_limit(user, 'mailbox_aliases_limit')
@@ -98,12 +83,23 @@ def dec_nb_mbaliases(mailboxalias):
owner = get_object_owner(mailboxalias)
dec_limit(owner, 'mailbox_aliases_limit')
@events.observe('CanCreate')
def can_create_new_object(user, objtype):
check_limit(user, '%s_limit' % objtype)
@events.observe("DomainAdminCreated")
def create_pool(user):
owner = get_object_owner(user)
inc_limit(owner, 'domain_admins_limit')
p = LimitsPool(user=user)
p.save()
p.create_limits()
@events.observe("DomainAdminDeleted")
def create_pool(da):
owner = get_object_owner(da)
dec_limit(owner, 'domain_admins_limit')
@events.observe("DomainAdminDeleted", "SuperAdminPromotion")
def move_pool_resource(user):
owner = get_object_owner(user)
+4
View File
@@ -30,6 +30,10 @@ class ResellerWithPasswordForm(ResellerForm, UserWithPasswordForm):
pass
class ResellerPoolForm(forms.Form):
domain_admins_limit = forms.IntegerField(
ugettext_noop("Max domain admins"),
help_text=ugettext_noop("Maximum number of domain administrators that can be created by this user")
)
domains_limit = forms.IntegerField(ugettext_noop("Max domains"),
help_text=ugettext_noop("Maximum number of domains that can be created by this user"))
domain_aliases_limit = forms.IntegerField(ugettext_noop("Max domain aliases"),
+1
View File
@@ -6,6 +6,7 @@ from django.utils.translation import ugettext as _, ugettext_noop
from modoboa.admin.models import User
reseller_limits_tpl = [
"domain_admins_limit",
"domains_limit",
"domain_aliases_limit",
"mailboxes_limit",
@@ -39,6 +39,6 @@ def reseller_actions(user, resid):
"img" : static_url("pics/settings.png"),
"title" : _("Edit limits allocated to this reseller"),
"class" : "boxed",
"rel" : "{handler:'iframe',size:{x:330,y:280}}"},
"rel" : "{handler:'iframe',size:{x:330,y:310}}"},
]
return render_actions(actions)
+2 -4
View File
@@ -15,20 +15,18 @@ import re
events = [
"SuperAdminPromotion",
"CanCreateDomain",
"CanCreate",
"CreateDomain",
"DeleteDomain",
"CanCreateDomainAlias",
"DomainAliasCreated",
"DomainAliasDeleted",
"CanCreateMailbox",
"CreateMailbox",
"DeleteMailbox",
"ModifyMailbox",
"CanCreateMailboxAlias",
"MailboxAliasCreated",
"MailboxAliasDeleted",
+2
View File
@@ -23,6 +23,7 @@ $("createfrom").addEvent("change", function(evt) {
url = "{% url admin.views.domain_admin_promotion %}";
styles = {height: 200};
}
var size = {y: styles.height};
new Request.JSON.mdb({
url: url,
onSuccess: function(response) {
@@ -37,6 +38,7 @@ $("createfrom").addEvent("change", function(evt) {
});
}
$(parent.document).getElement('iframe').setStyles(styles);
parent.SqueezeBox.resize(size);
}
}).get();
});