Add support for getting the list of all permissions as a choice

list.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2017-08-26 02:00:59 -04:00
parent 7fdd816a1a
commit f20810b2ae

View File

@@ -1,5 +1,6 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import itertools
import logging import logging
from django.apps import apps from django.apps import apps
@@ -52,11 +53,28 @@ class Permission(object):
_stored_permissions_cache = {} _stored_permissions_cache = {}
@classmethod @classmethod
def all(cls): def all(cls, as_choices=False):
# Return sorted permisions by namespace.name if as_choices:
return sorted( StoredPermission = apps.get_model(
cls._permissions.values(), key=lambda x: x.namespace.name 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 @classmethod
def check_permissions(cls, requester, permissions): def check_permissions(cls, requester, permissions):