Work in progress. I've moved permissions management to the new dedicated page. Adding permissions is working but deleting ones. I must also filter the list of users available when creating a super admin because the default admin appears inside :p
This commit is contained in:
tonio
2010-11-25 23:19:04 +01:00
parent f7ec14bc87
commit eff3c7d815
14 changed files with 240 additions and 171 deletions
+29
View File
@@ -1,7 +1,9 @@
from django import forms
from modoboa.admin.models import Domain, Mailbox, Alias
from django.utils.translation import ugettext as _
from django.contrib.auth.models import User
from modoboa.admin.templatetags.admin_extras import gender
from modoboa.lib import tables
class DomainForm(forms.ModelForm):
class Meta:
@@ -63,3 +65,30 @@ class PermissionForm(forms.Form):
choices=(("SuperAdmins", _("Super administrator")),
("DomainAdmins", _("Domain administrator"))),
help_text=_("Select the role you want this user to have"))
class SuperAdminForm(forms.Form):
user = forms.ModelChoiceField(queryset=User.objects.all(),
label=_("User"), required=True,
help_text=_("Select a user in the list"))
class DomainAdminForm(forms.Form):
domain = forms.ModelChoiceField(queryset=Domain.objects.all(), label=_("Domain"),
required=True,
help_text=_("Select a domain in the list"))
user = forms.ChoiceField(label=_("User"), required=True,
help_text=_("Select a user in the list"))
class SuperAdminsTable(tables.Table):
idkey = "id"
selection = tables.SelectionColumn("selection", width="4%", first=True)
_1_user_name = tables.Column("user_name", label=_("User name"))
_2_full_name = tables.Column("full_name", label=_("Full name"))
_3_enabled = tables.Column("enabled", label=_("Enabled_m"), width="10%")
class DomainAdminsTable(tables.Table):
idkey = "id"
selection = tables.SelectionColumn("selection", width="4%", first=True)
_1_domain = tables.Column("domain", label=_("Domain"))
_2_full_name = tables.Column("full_name", label=_("Full name"))
_3_enabled = tables.Column("enabled", label=_("Enabled_m"), width="10%")
+8
View File
@@ -99,6 +99,14 @@ class Mailbox(models.Model):
% (parameters.get_admin("STORAGE_PATH"),
self.domain.name, self.address))
def tohash(self):
return {
"id" : self.id,
"domain" : self.domain.name,
"full_name" : self.name,
"enabled" : self.user.is_active
}
class Alias(models.Model):
address = models.CharField(_('address'), max_length=100,
help_text=_("The alias address (without the domain part)"))
+15 -13
View File
@@ -31,7 +31,7 @@ def admin_menu(user):
if user.has_perm("auth.view_permissions"):
entries[0]["menu"] += [
{"name" : "permissions",
"url" : "",
"url" : reverse(admin.views.permissions),
"label" : _("Permissions"),
"img" : static_url("pics/permissions.png")}
]
@@ -40,7 +40,7 @@ def admin_menu(user):
{"name" : "settings",
"img" : static_url("pics/settings.png"),
"label" : _("Settings"),
"url" : reverse(admin.views.settings)}
"url" : reverse(admin.views.viewparameters)}
]
if not len(entries[0]["menu"]):
@@ -48,7 +48,6 @@ def admin_menu(user):
return render_to_string("common/menulist.html",
{"entries" : entries, "user" : user})
@register.simple_tag
def domain_menu(domain_id, selection, user):
entries = [
@@ -86,16 +85,6 @@ def domain_menu(domain_id, selection, user):
@register.simple_tag
def settings_menu(selection, user):
entries = [
{"name" : "permissions",
"url" : reverse(admin.views.settings),
"label" : _("Permissions"),
"img" : static_url("pics/permissions.png")},
{"name" : "addperm",
"url" : reverse(admin.views.addpermission),
"img" : static_url("pics/add.png"),
"label" : _("Add permission"),
"class" : "boxed",
"rel" : "{handler:'iframe',size:{x:320,y:210}}"},
{"name" : "parameters",
"url" : reverse(admin.views.viewparameters),
"img" : static_url("pics/domains.png"),
@@ -129,6 +118,19 @@ def domains_menu(selection, user):
{"entries" : entries, "selection" : selection,
"user" : user})
@register.simple_tag
def permissions_menu(user):
entries = [
{"name" : "addperm",
"label" : _("Add permission"),
"img" : static_url("pics/add.png")},
{"name" : "delperms",
"label" : _("Remove permissions"),
"img" : static_url("pics/remove.png")},
]
return render_to_string('common/menu.html',
{"entries" : entries, "user" : user})
@register.simple_tag
def loadadminextmenu(user):
menu = events.raiseQueryEvent("AdminMenuDisplay", target="admin_menu_box",
+4 -2
View File
@@ -16,11 +16,13 @@ urlpatterns = patterns('modoboa.admin.views',
url(r'^domains/(?P<dom_id>\d+)/aliases/$', "aliases", name="full-aliases"),
url(r'^domains/(?P<dom_id>\d+)/aliases/(?P<mbox_id>\d+)/$', "aliases", name="mbox-aliases"),
(r'^domains/(?P<dom_id>\d+)/delalias/(?P<alias_id>\d+)/$', 'delalias'),
(r'^settings/$', 'settings'),
(r'^settings/addperm/$', 'addpermission'),
(r'^settings/$', 'viewparameters'),
(r'^settings/delperm/(?P<mbox_id>\d+)/(?P<group>\w+)/$', 'deletepermission'),
(r'^settings/parameters/$', 'viewparameters'),
(r'^settings/parameters/save/$', 'saveparameters'),
(r'^settings/extensions/$', 'viewextensions'),
(r'^settings/extensions/save/$', 'saveextensions'),
(r'^permissions/$', 'permissions'),
(r'^permissions/superadmin/add/$', 'add_superadmin'),
(r'^permissions/domainadmin/add/$', 'add_domain_admin'),
)
+72 -29
View File
@@ -14,11 +14,10 @@ from django.contrib.auth.models import User, Group
from django.contrib import messages
from modoboa import admin, userprefs
from modoboa.admin.models import *
from forms import MailboxForm, DomainForm, AliasForm, PermissionForm
from models import *
from forms import *
from modoboa.lib.authbackends import crypt_password
from modoboa.lib import _render, _ctx_ok, _ctx_ko, getctx
from modoboa.lib import events, parameters
from modoboa.lib import _render, _ctx_ok, _ctx_ko, getctx, events, parameters
from modoboa.lib.models import Parameter
import string
import copy
@@ -88,7 +87,7 @@ def newdomain(request):
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
form = DomainForm()
return render_to_response('admin/newdomain.html', {
return _render(request, 'admin/newdomain.html', {
"form" : form
})
@@ -356,43 +355,87 @@ def delalias(request, dom_id, alias_id):
args=[dom_id]))
@login_required
@user_passes_test(lambda u: u.is_superuser)
def settings(request):
admins = User.objects.filter(is_superuser=True)
@permission_required("auth.view_permissions")
def permissions(request):
permtables = []
if request.user.is_superuser:
admins = User.objects.filter(is_superuser=True)
admins_list = []
for admin in admins:
admins_list += [{"id" : admin.id, "user_name" : admin.username,
"full_name" : "%s %s" % (admin.first_name, admin.last_name),
"enabled" : admin.is_active}]
permtables += [
{"title" : _("Super administrators"),
"content" : SuperAdminsTable(admins_list).render(request),
"addurl" : reverse(add_superadmin)}
]
permtables += events.raiseQueryEvent("PermsGetTables", user=request.user)
domadmins = Mailbox.objects.filter(user__groups__name="DomainAdmins")
domadmins_list = []
for admin in domadmins:
domadmins_list += [admin.tohash()]
permtables += [
{"title" : _("Domain administrators"),
"content" : DomainAdminsTable(domadmins_list).render(request),
"addurl" : reverse(add_domain_admin)}
]
return _render(request, 'admin/permissions.html', {
"admins" : admins, "domadmins" : domadmins
"permtables" : permtables
})
@login_required
@user_passes_test(lambda u: u.is_superuser)
def addpermission(request):
def add_superadmin(request):
if request.method == "POST":
form = PermissionForm(request.POST)
if request.POST.has_key('user'):
mboxid = request.POST['user']
form.fields["user"].choices = \
[(mboxid, Mailbox.objects.get(pk=mboxid)),]
form = SuperAdminForm(request.POST)
if form.is_valid():
mb = Mailbox.objects.get(pk=request.POST["user"])
if request.POST["role"] == "SuperAdmins":
mb.user.is_superuser = True
mb.user.groups.clear()
else:
mb.user.is_superuser = False
mb.user.groups.add(Group.objects.get(name=request.POST["role"]))
mb.user.save()
ctx = _ctx_ok(reverse(admin.views.settings))
user = User.objects.get(pk=request.POST["user"])
user.is_superuser = True
user.groups.clear()
user.save()
ctx = _ctx_ok(reverse(admin.views.permissions))
return HttpResponse(simplejson.dumps(ctx),
mimetype="application/json")
ctx = _ctx_ko("admin/addpermission.html", {
ctx = _ctx_ko("admin/add_superadmin.html", {
"form" : form
})
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
form = PermissionForm()
return _render(request, 'admin/addpermission.html', {
"form" : form
form = SuperAdminForm()
return _render(request, 'admin/add_permission.html', {
"form" : form, "title" : _("Add super administrator"),
"action" : reverse(add_superadmin)
})
@login_required
@permission_required("domains.create")
def add_domain_admin(request):
if request.method == "POST":
form = DomainAdminForm(request.POST)
mboxid = request.POST['user']
form.fields["user"].choices = \
[(mboxid, Mailbox.objects.get(pk=mboxid)),]
if form.is_valid():
mb = Mailbox.objects.get(pk=request.POST["user"])
mb.user.is_superuser = False
mb.user.groups.add(Group.objects.get(name="DomainAdmins"))
mb.user.save()
ctx = _ctx_ok(reverse(admin.views.permissions))
return HttpResponse(simplejson.dumps(ctx),
mimetype="application/json")
ctx = _ctx_ko("admin/add_domain_admin.html", {
"form" : form
})
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
form = DomainAdminForm()
return _render(request, 'admin/add_domain_admin.html', {
"form" : form, "title" : _("Add domain administrator"),
"action" : reverse(add_domain_admin)
})
@login_required