Sort permission namespaces and permissions in the role permission views.

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2018-04-02 04:45:10 -04:00
parent 7fb3828d77
commit 27bca4c438
2 changed files with 31 additions and 15 deletions

View File

@@ -27,20 +27,19 @@ class StoredPermission(models.Model):
verbose_name = _('Permission')
verbose_name_plural = _('Permissions')
def __init__(self, *args, **kwargs):
super(StoredPermission, self).__init__(*args, **kwargs)
try:
self.volatile_permission = Permission.get(
pk='{}.{}'.format(self.namespace, self.name),
proxy_only=True
)
except KeyError:
# Must be a deprecated permission in the database that is no
# longer used in the current code
pass
def __str__(self):
return force_text(getattr(self, 'volatile_permission', self.name))
try:
return force_text(self.get_volatile_permission())
except KeyError:
return self.name
def get_volatile_permission_id(self):
return '{}.{}'.format(self.namespace, self.name)
def get_volatile_permission(self):
return Permission.get(
pk=self.get_volatile_permission_id(), proxy_only=True
)
def natural_key(self):
return (self.namespace, self.name)

View File

@@ -136,7 +136,16 @@ class SetupRolePermissionsView(AssignRemoveView):
Permission.refresh()
results = []
for namespace, permissions in itertools.groupby(StoredPermission.objects.exclude(id__in=self.get_object().permissions.values_list('pk', flat=True)), lambda entry: entry.namespace):
available_permission = sorted(
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
]
@@ -148,7 +157,15 @@ class SetupRolePermissionsView(AssignRemoveView):
def right_list(self):
results = []
for namespace, permissions in itertools.groupby(self.get_object().permissions.all(), lambda entry: entry.namespace):
granted_permissions = sorted(
self.get_object().permissions.all(), key=lambda x: (
x.get_volatile_permission().namespace.label,
x.get_volatile_permission().label
)
)
for namespace, permissions in itertools.groupby(granted_permissions, lambda entry: entry.namespace):
permission_options = [
(force_text(permission.pk), permission) for permission in permissions
]