django_rbac: replace Operation.name by a registry (#49142)
There is no need to store the operation label in the database.
This commit is contained in:
parent
32de734b5a
commit
12fd246aeb
|
@ -422,10 +422,10 @@ GenericRelation(Permission,
|
|||
object_id_field='target_id').contribute_to_class(ContentType, 'admin_perms')
|
||||
|
||||
|
||||
CHANGE_PASSWORD_OP = Operation(name=_('Change password'), slug='change_password')
|
||||
RESET_PASSWORD_OP = Operation(name=_('Password reset'), slug='reset_password')
|
||||
ACTIVATE_OP = Operation(name=_('Activation'), slug='activate')
|
||||
CHANGE_EMAIL_OP = Operation(name=pgettext_lazy('operation', 'Change email'), slug='change_email')
|
||||
MANAGE_MEMBERS_OP = Operation(name=_('Manage role members'), slug='manage_members')
|
||||
MANAGE_AUTHORIZATIONS_OP = Operation(
|
||||
CHANGE_PASSWORD_OP = Operation.register(name=_('Change password'), slug='change_password')
|
||||
RESET_PASSWORD_OP = Operation.register(name=_('Password reset'), slug='reset_password')
|
||||
ACTIVATE_OP = Operation.register(name=_('Activation'), slug='activate')
|
||||
CHANGE_EMAIL_OP = Operation.register(name=pgettext_lazy('operation', 'Change email'), slug='change_email')
|
||||
MANAGE_MEMBERS_OP = Operation.register(name=_('Manage role members'), slug='manage_members')
|
||||
MANAGE_AUTHORIZATIONS_OP = Operation.register(
|
||||
name=_('Manage service consents'), slug='manage_authorizations')
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
# Generated by Django 2.2.17 on 2020-12-04 17:04
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('django_rbac', '0005_auto_20171209_1106'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='operation',
|
||||
name='name',
|
||||
),
|
||||
]
|
|
@ -102,9 +102,6 @@ class OrganizationalUnit(OrganizationalUnitAbstractBase):
|
|||
|
||||
|
||||
class Operation(models.Model):
|
||||
name = models.CharField(
|
||||
max_length=128,
|
||||
verbose_name=_('name'))
|
||||
slug = models.CharField(
|
||||
max_length=32,
|
||||
verbose_name=_('slug'),
|
||||
|
@ -114,10 +111,20 @@ class Operation(models.Model):
|
|||
return [self.slug]
|
||||
|
||||
def __str__(self):
|
||||
return six.text_type(_(self.name))
|
||||
return str(self._registry.get(self.slug, self.slug))
|
||||
|
||||
def export_json(self):
|
||||
return {'slug': self.slug, 'name': self.name}
|
||||
return {'slug': self.slug}
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return str(self)
|
||||
|
||||
@classmethod
|
||||
def register(cls, name, slug):
|
||||
cls._registry[slug] = name
|
||||
return cls(slug=slug)
|
||||
_registry = {}
|
||||
|
||||
objects = managers.OperationManager()
|
||||
|
||||
|
@ -408,9 +415,9 @@ class PermissionMixin(models.Model):
|
|||
return backends.DjangoRBACBackend().ous_with_perm(self, perm, queryset=queryset)
|
||||
|
||||
|
||||
ADMIN_OP = Operation(name=_('Management'), slug='admin')
|
||||
CHANGE_OP = Operation(name=_('Change'), slug='change')
|
||||
DELETE_OP = Operation(name=_('Delete'), slug='delete')
|
||||
ADD_OP = Operation(name=_('Add'), slug='add')
|
||||
VIEW_OP = Operation(name=_('View'), slug='view')
|
||||
SEARCH_OP = Operation(name=_('Search'), slug='search')
|
||||
ADMIN_OP = Operation.register(name=_('Management'), slug='admin')
|
||||
CHANGE_OP = Operation.register(name=_('Change'), slug='change')
|
||||
DELETE_OP = Operation.register(name=_('Delete'), slug='delete')
|
||||
ADD_OP = Operation.register(name=_('Add'), slug='add')
|
||||
VIEW_OP = Operation.register(name=_('View'), slug='view')
|
||||
SEARCH_OP = Operation.register(name=_('Search'), slug='search')
|
||||
|
|
|
@ -78,7 +78,5 @@ def get_permission_model():
|
|||
|
||||
def get_operation(operation_tpl):
|
||||
from . import models
|
||||
operation, created = models.Operation.objects.get_or_create(
|
||||
slug=six.text_type(operation_tpl.slug),
|
||||
defaults={'name': six.text_type(operation_tpl.name)})
|
||||
operation, created = models.Operation.objects.get_or_create(slug=operation_tpl.slug)
|
||||
return operation
|
||||
|
|
|
@ -345,7 +345,7 @@ def test_check_and_repair_managers_of_roles(db, capsys):
|
|||
def test_check_and_delete_unused_permissions(db, capsys, simple_user):
|
||||
Permission = get_permission_model()
|
||||
role1 = get_role_model().objects.create(name='Role1', slug='role1')
|
||||
op1 = Operation.objects.create(name='Operation 1', slug='operation-1')
|
||||
op1 = Operation.objects.create(slug='operation-1')
|
||||
used_perm = Permission.objects.create(
|
||||
operation=op1, target_id=role1.id,
|
||||
target_ct=ContentType.objects.get_for_model(get_role_model()))
|
||||
|
|
Loading…
Reference in New Issue