From f20810b2ae32a4fe2e0b40a279ac54563e168250 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Sat, 26 Aug 2017 02:00:59 -0400 Subject: [PATCH] Add support for getting the list of all permissions as a choice list. Signed-off-by: Roberto Rosario --- mayan/apps/permissions/classes.py | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/mayan/apps/permissions/classes.py b/mayan/apps/permissions/classes.py index 7ee6eea93e..637b724602 100644 --- a/mayan/apps/permissions/classes.py +++ b/mayan/apps/permissions/classes.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +import itertools import logging from django.apps import apps @@ -52,11 +53,28 @@ class Permission(object): _stored_permissions_cache = {} @classmethod - def all(cls): - # Return sorted permisions by namespace.name - return sorted( - cls._permissions.values(), key=lambda x: x.namespace.name - ) + def all(cls, as_choices=False): + if as_choices: + StoredPermission = apps.get_model( + app_label='permissions', model_name='StoredPermission' + ) + + results = [] + + for namespace, permissions in itertools.groupby(StoredPermission.objects.all(), lambda entry: entry.namespace): + permission_options = [ + (force_text(permission.pk), permission) for permission in permissions + ] + results.append( + (PermissionNamespace.get(namespace), permission_options) + ) + + return results + else: + # Return sorted permisions by namespace.name + return sorted( + cls._permissions.values(), key=lambda x: x.namespace.name + ) @classmethod def check_permissions(cls, requester, permissions):