Projet

Général

Profil

0001-django_rbac-replace-Operation.name-by-a-registry-491.patch

Benjamin Dauvergne, 04 décembre 2020 18:14

Télécharger (4,99 ko)

Voir les différences:

Subject: [PATCH] django_rbac: replace Operation.name by a registry (#49142)

There is no need to store the operation label in the database.
 src/authentic2/a2_rbac/models.py              | 12 ++++----
 .../migrations/0006_remove_operation_name.py  | 17 +++++++++++
 src/django_rbac/models.py                     | 29 ++++++++++++-------
 src/django_rbac/utils.py                      |  4 +--
 4 files changed, 42 insertions(+), 20 deletions(-)
 create mode 100644 src/django_rbac/migrations/0006_remove_operation_name.py
src/authentic2/a2_rbac/models.py
422 422
                object_id_field='target_id').contribute_to_class(ContentType, 'admin_perms')
423 423

  
424 424

  
425
CHANGE_PASSWORD_OP = Operation(name=_('Change password'), slug='change_password')
426
RESET_PASSWORD_OP = Operation(name=_('Password reset'), slug='reset_password')
427
ACTIVATE_OP = Operation(name=_('Activation'), slug='activate')
428
CHANGE_EMAIL_OP = Operation(name=pgettext_lazy('operation', 'Change email'), slug='change_email')
429
MANAGE_MEMBERS_OP = Operation(name=_('Manage role members'), slug='manage_members')
430
MANAGE_AUTHORIZATIONS_OP = Operation(
425
CHANGE_PASSWORD_OP = Operation.register(name=_('Change password'), slug='change_password')
426
RESET_PASSWORD_OP = Operation.register(name=_('Password reset'), slug='reset_password')
427
ACTIVATE_OP = Operation.register(name=_('Activation'), slug='activate')
428
CHANGE_EMAIL_OP = Operation.register(name=pgettext_lazy('operation', 'Change email'), slug='change_email')
429
MANAGE_MEMBERS_OP = Operation.register(name=_('Manage role members'), slug='manage_members')
430
MANAGE_AUTHORIZATIONS_OP = Operation.register(
431 431
    name=_('Manage service consents'), slug='manage_authorizations')
src/django_rbac/migrations/0006_remove_operation_name.py
1
# Generated by Django 2.2.17 on 2020-12-04 17:04
2

  
3
from django.db import migrations
4

  
5

  
6
class Migration(migrations.Migration):
7

  
8
    dependencies = [
9
        ('django_rbac', '0005_auto_20171209_1106'),
10
    ]
11

  
12
    operations = [
13
        migrations.RemoveField(
14
            model_name='operation',
15
            name='name',
16
        ),
17
    ]
src/django_rbac/models.py
102 102

  
103 103

  
104 104
class Operation(models.Model):
105
    name = models.CharField(
106
        max_length=128,
107
        verbose_name=_('name'))
108 105
    slug = models.CharField(
109 106
        max_length=32,
110 107
        verbose_name=_('slug'),
......
114 111
        return [self.slug]
115 112

  
116 113
    def __str__(self):
117
        return six.text_type(_(self.name))
114
        return self._registry[self.slug]
118 115

  
119 116
    def export_json(self):
120
        return {'slug': self.slug, 'name': self.name}
117
        return {'slug': self.slug}
118

  
119
    @property
120
    def name(self):
121
        return str(self)
122

  
123
    @classmethod
124
    def register(cls, name, slug):
125
        cls._registry[slug] = name
126
        return cls(slug=slug)
127
    _registry = {}
121 128

  
122 129
    objects = managers.OperationManager()
123 130

  
......
408 415
        return backends.DjangoRBACBackend().ous_with_perm(self, perm, queryset=queryset)
409 416

  
410 417

  
411
ADMIN_OP = Operation(name=_('Management'), slug='admin')
412
CHANGE_OP = Operation(name=_('Change'), slug='change')
413
DELETE_OP = Operation(name=_('Delete'), slug='delete')
414
ADD_OP = Operation(name=_('Add'), slug='add')
415
VIEW_OP = Operation(name=_('View'), slug='view')
416
SEARCH_OP = Operation(name=_('Search'), slug='search')
418
ADMIN_OP = Operation.register(name=_('Management'), slug='admin')
419
CHANGE_OP = Operation.register(name=_('Change'), slug='change')
420
DELETE_OP = Operation.register(name=_('Delete'), slug='delete')
421
ADD_OP = Operation.register(name=_('Add'), slug='add')
422
VIEW_OP = Operation.register(name=_('View'), slug='view')
423
SEARCH_OP = Operation.register(name=_('Search'), slug='search')
src/django_rbac/utils.py
78 78

  
79 79
def get_operation(operation_tpl):
80 80
    from . import models
81
    operation, created = models.Operation.objects.get_or_create(
82
        slug=six.text_type(operation_tpl.slug),
83
        defaults={'name': six.text_type(operation_tpl.name)})
81
    operation, created = models.Operation.objects.get_or_create(slug=operation_tpl.slug)
84 82
    return operation
85
-