diff options
author | Leif Johansson <leifj@sunet.se> | 2011-03-03 23:28:11 +0100 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2011-03-03 23:28:11 +0100 |
commit | d60a62a68a5c3442a6b464cca1c1a218d57d8ecc (patch) | |
tree | bc7f4d62751fff095bfcd547a95714b19e5b5487 /coip/apps/name | |
parent | 5bf172664d789d10781441e2a812f626c15c8da6 (diff) |
new acl UI
Diffstat (limited to 'coip/apps/name')
-rw-r--r-- | coip/apps/name/forms.py | 24 | ||||
-rw-r--r-- | coip/apps/name/models.py | 1 | ||||
-rw-r--r-- | coip/apps/name/views.py | 40 |
3 files changed, 53 insertions, 12 deletions
diff --git a/coip/apps/name/forms.py b/coip/apps/name/forms.py index dc36ecd..549456f 100644 --- a/coip/apps/name/forms.py +++ b/coip/apps/name/forms.py @@ -6,7 +6,7 @@ Created on Jun 24, 2010 from django import forms from coip.apps.name.models import Name, Attribute, NameLink from django.forms import fields -from django.forms.widgets import HiddenInput, CheckboxSelectMultiple +from django.forms.widgets import HiddenInput, CheckboxSelectMultiple, TextInput from form_utils.forms import BetterModelForm, BetterForm class NameForm(forms.ModelForm): @@ -71,7 +71,23 @@ class NameLinkForm(forms.ModelForm): class NameLinkDeleteForm(forms.Form): confirm = fields.BooleanField(label="Confirm") -class PermissionForm(forms.Form): +class PermissionForm(BetterForm): dst = fields.IntegerField(widget=HiddenInput) - subject = fields.CharField(min_length=1024) - permissions = fields.MultipleChoiceField(widget=CheckboxSelectMultiple,choices=[('r','read'),('w','write'),('l','list'),('i','insert'),('d','delete')]) + subject = fields.CharField(max_length=1024,label="Group",widget=TextInput(attrs={'size': 40})) + permissions = fields.MultipleChoiceField(widget=CheckboxSelectMultiple, + choices=[('r','read'), + ('w','write'), + ('l','list members and groups'), + ('i','manage members'), + ('d','delete'), + ('a','manage access')]) + class Meta: + fieldsets = [('subject',{'fields': ['dst','subject'], + 'legend': 'Step 1: Select a group', + 'classes': ['step'], + 'description': 'Start typing in the textfield to find the group you want.'}), + ('permission',{'fields': ['permissions'], + 'legend': 'Step 2: Set permissions', + 'classes': ['step','submit_step'], + 'description': 'Select the rights that members of the group should have.'})] +
\ No newline at end of file diff --git a/coip/apps/name/models.py b/coip/apps/name/models.py index a1384a3..d8c089e 100644 --- a/coip/apps/name/models.py +++ b/coip/apps/name/models.py @@ -204,6 +204,7 @@ class NameLink(models.Model): access_control = 0 part_of = 1 + child_access_control = 2 def __unicode__(self): return "%s -> %s [%s %s]" % (self.src,self.dst,self.type,self.data) diff --git a/coip/apps/name/views.py b/coip/apps/name/views.py index 90c0773..3032374 100644 --- a/coip/apps/name/views.py +++ b/coip/apps/name/views.py @@ -9,12 +9,13 @@ from django.http import HttpResponseNotFound, HttpResponseForbidden,\ HttpResponseRedirect, Http404 from django.contrib.auth.decorators import login_required from coip.multiresponse import respond_to, json_response, render403 -from pprint import pformat +from pprint import pformat, pprint import logging from coip.apps.name.forms import NameEditForm, NewNameForm, NameDeleteForm,\ PermissionForm from django.shortcuts import get_object_or_404 from django.contrib.auth.models import User +from django.db.models import Q @login_required def delete(request,id): @@ -89,7 +90,18 @@ def edit(request,id): @login_required -def editacl(request,id,type): +def lsacl(request,id,type=NameLink.access_control): + name = get_object_or_404(Name,pk=id) + + if not name.has_permission(request.user,'a'): + return render403("You do not have permission to list permissions on %s" % (name)) + + return respond_to(request, + {'text/html': 'apps/name/acls.html'}, + {'name': name, 'acl': name.lsacl()}) + +@login_required +def addacl(request,id,type=NameLink.access_control): name = get_object_or_404(Name,pk=id) if not name.has_permission(request.user,'a'): @@ -103,13 +115,17 @@ def editacl(request,id,type): p = form.cleaned_data['permissions'] if not p: p = [] - perms = p.join('') - link = NameLink.objects.get_or_create(src=name,dst=dst,type=NameLink.access_control) + perms = "".join(p) + (link,created) = NameLink.objects.get_or_create(src=name,dst=dst,type=NameLink.access_control) link.data = perms link.save() - - form = PermissionForm() - return respond_to(request,{'text/html': 'apps/name/acls.html'},{'form': form, 'name': name, 'acl': name.lsacl(),'formtitle': 'Add Permission','submitname':'Add'}) + return HttpResponseRedirect("/name/%s/acl/%s" % (id,type)) + else: + form = PermissionForm() + + return respond_to(request, + {'text/html': 'apps/name/addace.html'}, + {'form': form, 'name': name,'formtitle': 'Add Permission','submitname':'Add'}) @login_required def links(request,id,type=NameLink.access_control): @@ -207,4 +223,12 @@ def rtree(request,id=None): @login_required def ctree(request,id=None): - return _tree(request,id,False)
\ No newline at end of file + return _tree(request,id,False) + +@login_required +def search(request): + list = [] + if request.REQUEST.has_key('term'): + term = request.REQUEST['term'] + list = [{'label': name.short,'value': name.id} for name in Name.objects.filter(Q(short__contains=term) | Q(value__contains=term))] + return json_response(list)
\ No newline at end of file |