From 9ec7fa7f93bd7d2acaf5aecb82b0a0090e1e176e Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Tue, 3 Apr 2018 03:21:35 -0400 Subject: [PATCH] Sort permissions in the ACL edit view and copy solution to improve the role permission sorting. Signed-off-by: Roberto Rosario --- mayan/apps/acls/views.py | 7 ++++ mayan/apps/permissions/views.py | 58 ++++++++++++++------------------- 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/mayan/apps/acls/views.py b/mayan/apps/acls/views.py index 9f156e1fc3..3e4c8d60de 100644 --- a/mayan/apps/acls/views.py +++ b/mayan/apps/acls/views.py @@ -155,6 +155,13 @@ class ACLPermissionsView(AssignRemoveView): def generate_choices(entries): results = [] + entries = sorted( + entries, key=lambda x: ( + x.get_volatile_permission().namespace.label, + x.get_volatile_permission().label + ) + ) + for namespace, permissions in itertools.groupby(entries, lambda entry: entry.namespace): permission_options = [ (force_text(permission.pk), permission) for permission in permissions diff --git a/mayan/apps/permissions/views.py b/mayan/apps/permissions/views.py index 0187479e4b..87f5cbc06b 100644 --- a/mayan/apps/permissions/views.py +++ b/mayan/apps/permissions/views.py @@ -116,6 +116,27 @@ class SetupRolePermissionsView(AssignRemoveView): left_list_title = _('Available permissions') right_list_title = _('Granted permissions') + @staticmethod + def generate_choices(entries): + results = [] + + entries = sorted( + entries, key=lambda x: ( + x.get_volatile_permission().namespace.label, + x.get_volatile_permission().label + ) + ) + + for namespace, permissions in itertools.groupby(entries, lambda entry: entry.namespace): + permission_options = [ + (force_text(permission.pk), permission) for permission in permissions + ] + results.append( + (PermissionNamespace.get(namespace), permission_options) + ) + + return results + def add(self, item): Permission.check_permissions( self.request.user, permissions=(permission_permission_grant,) @@ -141,47 +162,18 @@ class SetupRolePermissionsView(AssignRemoveView): def left_list(self): Permission.refresh() - results = [] - available_permission = sorted( - StoredPermission.objects.exclude( + return SetupRolePermissionsView.generate_choices( + entries=StoredPermission.objects.exclude( id__in=self.get_object().permissions.values_list('pk', flat=True) - ), key=lambda x: ( - x.get_volatile_permission().namespace.label, - x.get_volatile_permission().label ) ) - for namespace, permissions in itertools.groupby(available_permission, lambda entry: entry.namespace): - permission_options = [ - (force_text(permission.pk), permission) for permission in permissions - ] - results.append( - (PermissionNamespace.get(namespace), permission_options) - ) - - return results - def right_list(self): - results = [] - - granted_permissions = sorted( - self.get_object().permissions.all(), key=lambda x: ( - x.get_volatile_permission().namespace.label, - x.get_volatile_permission().label - ) + return SetupRolePermissionsView.generate_choices( + entries=self.get_object().permissions.all() ) - for namespace, permissions in itertools.groupby(granted_permissions, lambda entry: entry.namespace): - permission_options = [ - (force_text(permission.pk), permission) for permission in permissions - ] - results.append( - (PermissionNamespace.get(namespace), permission_options) - ) - - return results - def remove(self, item): Permission.check_permissions( self.request.user, permissions=(permission_permission_revoke,)