diff --git a/mayan/apps/acls/apps.py b/mayan/apps/acls/apps.py index a86efadb28..f634672c91 100644 --- a/mayan/apps/acls/apps.py +++ b/mayan/apps/acls/apps.py @@ -4,16 +4,18 @@ from django import apps from django.db.models.signals import post_migrate from django.utils.translation import ugettext_lazy as _ -from navigation.api import register_links -from project_setup.api import register_setup +from common.menus import ( + menu_multi_item, menu_object, menu_secondary, menu_setup, menu_sidebar +) from .classes import ( AccessHolder, AccessObject, AccessObjectClass, ClassAccessHolder ) from .links import ( - acl_class_acl_detail, acl_class_acl_list, acl_class_grant, acl_class_list, - acl_class_new_holder_for, acl_class_revoke, acl_detail, acl_grant, - acl_holder_new, acl_revoke, acl_setup_valid_classes + link_acl_class_acl_detail, link_acl_class_acl_list, link_acl_class_grant, + link_acl_class_list, link_acl_class_new_holder_for, link_acl_class_revoke, + link_acl_detail, link_acl_grant, link_acl_holder_new, link_acl_revoke, + link_acl_setup_valid_classes ) from .models import CreatorSingleton @@ -28,13 +30,22 @@ class ACLsApp(apps.AppConfig): verbose_name = _('ACLs') def ready(self): - register_links([AccessObject], [acl_holder_new], menu_name='sidebar') - register_links(AccessObjectClass, [acl_class_acl_list, acl_class_new_holder_for]) - register_links(AccessHolder, [acl_detail]) - register_links(['acls:acl_setup_valid_classes', 'acls:acl_class_acl_list', 'acls:acl_class_new_holder_for', 'acls:acl_class_acl_detail', 'acls:acl_class_multiple_grant', 'acls:acl_class_multiple_revoke'], [acl_class_list], menu_name='secondary_menu') - register_links(ClassAccessHolder, [acl_class_acl_detail]) - register_links(['acls:acl_detail'], [acl_grant, acl_revoke], menu_name='multi_item_links') - register_links(['acls:acl_class_acl_detail'], [acl_class_grant, acl_class_revoke], menu_name='multi_item_links') - register_setup(acl_setup_valid_classes) + menu_sidebar.bind_links(links=[link_acl_holder_new], sources=[AccessObject]) + #register_links(AccessObjectClass, [acl_class_acl_list, acl_class_new_holder_for]) + #register_links(AccessHolder, [acl_detail]) + #register_links(ClassAccessHolder, [acl_class_acl_detail]) + #register_links(['acls:acl_detail'], [acl_grant, acl_revoke], menu_name='multi_item_links') + #register_links(['acls:acl_class_acl_detail'], [acl_class_grant, acl_class_revoke], menu_name='multi_item_links') + menu_setup.bind_links(links=[link_acl_setup_valid_classes]) post_migrate.connect(create_creator_user, dispatch_uid='create_creator_user') + + menu_secondary.bind_links( + links=[link_acl_class_list], + sources=[ + 'acls:acl_setup_valid_classes', 'acls:acl_class_acl_list', + 'acls:acl_class_new_holder_for', 'acls:acl_class_acl_detail', + 'acls:acl_class_multiple_grant', + 'acls:acl_class_multiple_revoke' + ], + ) diff --git a/mayan/apps/acls/links.py b/mayan/apps/acls/links.py index 336eb224f3..9e0800a0af 100644 --- a/mayan/apps/acls/links.py +++ b/mayan/apps/acls/links.py @@ -2,20 +2,23 @@ from __future__ import unicode_literals from django.utils.translation import ugettext_lazy as _ +from navigation import Link + from .permissions import ( ACLS_CLASS_EDIT_ACL, ACLS_CLASS_VIEW_ACL, ACLS_EDIT_ACL, ACLS_VIEW_ACL ) -acl_list = {'text': _('ACLs'), 'view': 'acls:acl_list', 'famfam': 'lock', 'permissions': [ACLS_VIEW_ACL]} -acl_detail = {'text': _('Details'), 'view': 'acls:acl_detail', 'args': ['access_object.gid', 'object.gid'], 'famfam': 'key_go', 'permissions': [ACLS_VIEW_ACL]} -acl_grant = {'text': _('Grant'), 'view': 'acls:acl_multiple_grant', 'famfam': 'key_add', 'permissions': [ACLS_EDIT_ACL]} -acl_revoke = {'text': _('Revoke'), 'view': 'acls:acl_multiple_revoke', 'famfam': 'key_delete', 'permissions': [ACLS_EDIT_ACL]} -acl_holder_new = {'text': _('New holder'), 'view': 'acls:acl_holder_new', 'args': 'access_object.gid', 'famfam': 'user', 'permissions': [ACLS_EDIT_ACL]} +link_acl_list = Link(permissions=[ACLS_VIEW_ACL], text=_('ACLs'), view='acls:acl_list') -acl_setup_valid_classes = {'text': _('Default ACLs'), 'view': 'acls:acl_setup_valid_classes', 'icon': 'fa fa-lock', 'permissions': [ACLS_CLASS_VIEW_ACL]} -acl_class_list = {'text': _('Classes'), 'view': 'acls:acl_setup_valid_classes', 'famfam': 'package', 'permissions': [ACLS_CLASS_VIEW_ACL]} -acl_class_acl_list = {'text': _('ACLs for class'), 'view': 'acls:acl_class_acl_list', 'args': 'object.gid', 'famfam': 'lock_go', 'permissions': [ACLS_CLASS_VIEW_ACL]} -acl_class_acl_detail = {'text': _('Details'), 'view': 'acls:acl_class_acl_detail', 'args': ['access_object_class.gid', 'object.gid'], 'famfam': 'key_go', 'permissions': [ACLS_CLASS_VIEW_ACL]} -acl_class_new_holder_for = {'text': _('New holder'), 'view': 'acls:acl_class_new_holder_for', 'args': 'object.gid', 'famfam': 'user', 'permissions': [ACLS_CLASS_EDIT_ACL]} -acl_class_grant = {'text': _('Grant'), 'view': 'acls:acl_class_multiple_grant', 'famfam': 'key_add', 'permissions': [ACLS_CLASS_EDIT_ACL]} -acl_class_revoke = {'text': _('Revoke'), 'view': 'acls:acl_class_multiple_revoke', 'famfam': 'key_delete', 'permissions': [ACLS_CLASS_EDIT_ACL]} +link_acl_detail = Link(permissions=[ACLS_VIEW_ACL], text=_('Details'), view='acls:acl_detail', args=['access_object.gid', 'object.gid']) +link_acl_grant = Link(permissions=[ACLS_EDIT_ACL], text=_('Grant'), view='acls:acl_multiple_grant') +link_acl_revoke = Link(permissions=[ACLS_EDIT_ACL], text=_('Revoke'), view='acls:acl_multiple_revoke') +link_acl_holder_new = Link(permissions=[ACLS_EDIT_ACL], text=_('New holder'), view='acls:acl_holder_new', args='access_object.gid') +link_acl_setup_valid_classes = Link(icon='fa fa-lock', permissions=[ACLS_CLASS_VIEW_ACL], text=_('Default ACLs'), view='acls:acl_setup_valid_classes') +link_acl_class_list = Link(permissions=[ACLS_CLASS_VIEW_ACL], text=_('Classes'), view='acls:acl_setup_valid_classes') + +link_acl_class_acl_list = Link(permissions=[ACLS_CLASS_VIEW_ACL], text=_('ACLs for class'), view='acls:acl_class_acl_list', args='object.gid') +link_acl_class_acl_detail = Link(permissions=[ACLS_CLASS_VIEW_ACL], text=_('Details'), view='acls:acl_class_acl_detail', args=['access_object_class.gid', 'object.gid']) +link_acl_class_new_holder_for = Link(permissions=[ACLS_CLASS_EDIT_ACL], text=_('New holder'), view='acls:acl_class_new_holder_for', args='object.gid') +link_acl_class_grant = Link(permissions=[ACLS_CLASS_EDIT_ACL], text=_('Grant'), view='acls:acl_class_multiple_grant') +link_acl_class_revoke = Link(permissions=[ACLS_CLASS_EDIT_ACL], text=_('Revoke'), view='acls:acl_class_multiple_revoke') diff --git a/mayan/apps/acls/templatetags/__init__.py b/mayan/apps/acls/templatetags/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/mayan/apps/acls/templatetags/acl_tags.py b/mayan/apps/acls/templatetags/acl_tags.py deleted file mode 100644 index f8f8471912..0000000000 --- a/mayan/apps/acls/templatetags/acl_tags.py +++ /dev/null @@ -1,73 +0,0 @@ -from __future__ import unicode_literals - -import logging - -from django.core.exceptions import PermissionDenied -from django.template import ( - Library, Node, TemplateSyntaxError, Variable, VariableDoesNotExist -) - -from acls.models import AccessEntry - -logger = logging.getLogger(__name__) -register = Library() - - -class CheckAccessNode(Node): - def __init__(self, permission_list=None, requester=None, obj=None, *args, **kwargs): - self.requester = requester - self.permission_list = permission_list - self.obj = obj - - def render(self, context): - permission_list = Variable(self.permission_list).resolve(context) - logger.debug('permission_list: %s', ','.join([unicode(p) for p in permission_list])) - - try: - # Check access_object, useful for document_page views - obj = Variable('access_object').resolve(context) - logger.debug('access_object: %s', obj) - except VariableDoesNotExist: - try: - obj = Variable(self.obj).resolve(context) - logger.debug('obj: %s', obj) - except VariableDoesNotExist: - context['access'] = False - logger.debug('no obj, access False') - return '' - - if not permission_list: - # There is no permissions list to check against which means - # this link is available for all - context['access'] = True - return '' - - requester = Variable(self.requester).resolve(context) - logger.debug('requester: %s', requester) - - if obj: - try: - AccessEntry.objects.check_accesses(permission_list, requester, obj) - except PermissionDenied: - context['access'] = False - logger.debug('access: False') - return '' - else: - context['access'] = True - logger.debug('access: True') - return '' - else: - context['access'] = False - logger.debug('No object, access: False') - return '' - - -@register.tag -def check_access(parser, token): - try: - # Splitting by None == splitting by spaces. - tag_name, args = token.contents.split(None, 1) - except ValueError: - raise TemplateSyntaxError('%r tag requires arguments' % token.contents.split()[0]) - - return CheckAccessNode(*args.split()) diff --git a/mayan/apps/appearance/templates/appearance/base.html b/mayan/apps/appearance/templates/appearance/base.html index 37dfb115ea..861e91aead 100644 --- a/mayan/apps/appearance/templates/appearance/base.html +++ b/mayan/apps/appearance/templates/appearance/base.html @@ -107,7 +107,7 @@