diff --git a/apps/acls/__init__.py b/apps/acls/__init__.py index c6dd477306..64becbdef5 100644 --- a/apps/acls/__init__.py +++ b/apps/acls/__init__.py @@ -5,7 +5,8 @@ from django.utils.translation import ugettext_lazy as _ from navigation.api import register_links, register_multi_item_links from project_setup.api import register_setup -from .classes import AccessHolder, AccessObjectClass, ClassAccessHolder +from .classes import (AccessHolder, AccessObjectClass, ClassAccessHolder, + AccessObject) from .permissions import (ACLS_EDIT_ACL, ACLS_VIEW_ACL, ACLS_CLASS_EDIT_ACL, ACLS_CLASS_VIEW_ACL) @@ -14,6 +15,7 @@ acl_list = {'text': _(u'ACLs'), 'view': 'acl_list', 'famfam': 'lock', 'permissio acl_detail = {'text': _(u'details'), 'view': 'acl_detail', 'args': ['access_object.gid', 'object.gid'], 'famfam': 'key_go', 'permissions': [ACLS_VIEW_ACL]} acl_grant = {'text': _(u'grant'), 'view': 'acl_multiple_grant', 'famfam': 'key_add', 'permissions': [ACLS_EDIT_ACL]} acl_revoke = {'text': _(u'revoke'), 'view': 'acl_multiple_revoke', 'famfam': 'key_delete', 'permissions': [ACLS_EDIT_ACL]} +acl_holder_new = {'text': _(u'New holder'), 'view': 'acl_holder_new', 'args': 'access_object.gid', 'famfam': 'user', 'permissions': [ACLS_EDIT_ACL]} acl_setup_valid_classes = {'text': _(u'Default ACLs'), 'view': 'acl_setup_valid_classes', 'icon': 'lock.png', 'permissions': [ACLS_CLASS_VIEW_ACL]} acl_class_list = {'text': _(u'List of classes'), 'view': 'acl_setup_valid_classes', 'famfam': 'package', 'permissions': [ACLS_CLASS_VIEW_ACL]} @@ -26,6 +28,8 @@ acl_class_revoke = {'text': _(u'revoke'), 'view': 'acl_class_multiple_revoke', ' register_links(AccessHolder, [acl_detail]) register_multi_item_links(['acl_detail'], [acl_grant, acl_revoke]) +register_links([AccessObject], [acl_holder_new], menu_name='sidebar') + register_setup(acl_setup_valid_classes) register_links(['acl_setup_valid_classes', 'acl_class_acl_list', 'acl_class_new_holder_for', 'acl_class_acl_detail'], [acl_class_list], menu_name='secondary_menu') diff --git a/apps/acls/urls.py b/apps/acls/urls.py index ff1e9dd4b3..a544274b5b 100644 --- a/apps/acls/urls.py +++ b/apps/acls/urls.py @@ -4,6 +4,7 @@ urlpatterns = patterns('acls.views', url(r'^new_holder_for/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/$', 'acl_new_holder_for', (), 'acl_new_holder_for'), url(r'^list_for/(?P[-\w]+)/(?P[-\w]+)/(?P\d+)/$', 'acl_list', (), 'acl_list'), url(r'^details/(?P[.\w]+)/holder/(?P[.\w]+)/$', 'acl_detail', (), 'acl_detail'), + url(r'^holder/new/(?P[.\w]+)/$', 'acl_holder_new', (), 'acl_holder_new'), url(r'^multiple/grant/$', 'acl_grant', (), 'acl_multiple_grant'), url(r'^multiple/revoke/$', 'acl_revoke', (), 'acl_multiple_revoke'), diff --git a/apps/acls/views.py b/apps/acls/views.py index 375ab37b6e..d0a71b79a7 100644 --- a/apps/acls/views.py +++ b/apps/acls/views.py @@ -55,7 +55,12 @@ def acl_list_for(request, obj, extra_context=None): {'name': _(u'permissions'), 'attribute': encapsulate(lambda x: _permission_titles(AccessEntry.objects.get_holder_permissions_for(obj, x.source_object)))}, ], 'hide_object': True, - 'access_object': AccessObject.encapsulate(obj) + 'access_object': AccessObject.encapsulate(obj), + 'object': obj, + 'navigation_object_list': [ + {'object': 'object'}, + {'object': 'access_object'} + ], } if extra_context: @@ -78,12 +83,10 @@ def acl_detail(request, access_object_gid, holder_object_gid): except ObjectDoesNotExist: raise Http404 - navigation_object = request.GET.get('navigation_object') - logger.debug('navigation_object: %s' % navigation_object) - return acl_detail_for(request, holder.source_object, access_object.source_object, navigation_object) + return acl_detail_for(request, holder.source_object, access_object.source_object) -def acl_detail_for(request, actor, obj, navigation_object=None): +def acl_detail_for(request, actor, obj): try: Permission.objects.check_permissions(request.user, [ACLS_VIEW_ACL]) except PermissionDenied: @@ -123,15 +126,13 @@ def acl_detail_for(request, actor, obj, navigation_object=None): 'permission_pk': lambda x: x.pk, 'holder_gid': lambda x: AccessHolder(actor).gid, 'object_gid': lambda x: AccessObject(obj).gid, - } + }, + 'access_object': AccessObject.encapsulate(obj), + 'navigation_object_list': [ + {'object': 'object'}, + {'object': 'access_object'} + ], } - - if navigation_object: - context.update( - { - navigation_object: obj - } - ) return render_to_response( 'generic_detail.html', @@ -359,13 +360,28 @@ def acl_new_holder_for(request, obj, extra_context=None, navigation_object=None) 'title': _(u'add new holder for: %s') % obj, 'submit_label': _(u'Select'), 'submit_icon_famfam': 'tick', + 'object': obj, + 'access_object': AccessObject.encapsulate(obj), + 'navigation_object_list': [ + {'object': 'object'}, + {'object': 'access_object'}, + ], } - + if extra_context: context.update(extra_context) return render_to_response('generic_form.html', context, - context_instance=RequestContext(request)) + context_instance=RequestContext(request)) + + +def acl_holder_new(request, access_object_gid): + try: + access_object = AccessObject.get(gid=access_object_gid) + except ObjectDoesNotExist: + raise Http404 + + return acl_new_holder_for(request, access_object.source_object)#, extra_context={'access_object': access_object}) # Setup views @@ -435,7 +451,6 @@ def acl_class_acl_detail(request, access_object_class_gid, holder_object_gid): 'attribute': encapsulate(lambda x: two_state_template(DefaultAccessEntry.objects.has_access(x, actor.source_object, access_object_class.source_object))) }, ], - #'hide_link': True, 'hide_object': True, } },