From ce60086128512e3333d98074b98c52ca86e97426 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Mon, 20 Dec 2021 16:40:44 +0100 Subject: [PATCH 1/2] manager: handle data-pk row attribute at view level (#59664) --- src/authentic2/manager/tables.py | 52 +++++++++++-------- .../templates/authentic2/manager/table.html | 5 +- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/authentic2/manager/tables.py b/src/authentic2/manager/tables.py index 430caf11..1e35ff52 100644 --- a/src/authentic2/manager/tables.py +++ b/src/authentic2/manager/tables.py @@ -30,6 +30,11 @@ from authentic2_idp_oidc.models import OIDCAuthorization User = get_user_model() +class Table(tables.Table): + class Meta: + row_attrs = {"data-pk": lambda record: record.pk} + + class PermissionLinkColumn(tables.LinkColumn): def render(self, value, record, bound_column, **kwargs): request = StoreRequestMiddleware.get_request() @@ -60,7 +65,7 @@ class UserLinkColumn(PermissionLinkColumn): return value -class UserTable(tables.Table): +class UserTable(Table): link = UserLinkColumn( verbose_name=_('User'), accessor='get_full_name', @@ -70,7 +75,7 @@ class UserTable(tables.Table): email = VerifiableEmailColumn() ou = tables.Column() - class Meta: + class Meta(Table.Meta): model = User attrs = {'class': 'main', 'id': 'user-table'} fields = ('username', 'email', 'first_name', 'last_name', 'ou') @@ -99,18 +104,21 @@ class UserOrRoleColumn(UserLinkColumn): return value -class MixedUserRoleTable(tables.Table): +class MixedUserRoleTable(Table): name = UserOrRoleColumn( verbose_name=_('Members'), text=str, orderable=False, ) - class Meta: + class Meta(Table.Meta): attrs = {'class': 'main', 'id': 'user-table'} + row_attrs = { + "data-pk": lambda record: '%s-%s' % ('user' if isinstance(record, User) else 'role', record.pk) + } -class RoleTable(tables.Table): +class RoleTable(Table): name = tables.LinkColumn( viewname='a2-manager-role-members', kwargs={'pk': A('pk')}, accessor='name', verbose_name=_('label') ) @@ -123,36 +131,36 @@ class RoleTable(tables.Table): content = SafeText('%s (%s)' % (content, _('LDAP'))) return content - class Meta: + class Meta(Table.Meta): model = Role attrs = {'class': 'main', 'id': 'role-table'} fields = ('name', 'slug', 'ou', 'member_count') -class PermissionTable(tables.Table): +class PermissionTable(Table): operation = tables.Column() scope = tables.Column() target = tables.Column() - class Meta: + class Meta(Table.Meta): model = Permission attrs = {'class': 'main', 'id': 'role-table'} fields = ('operation', 'scope', 'target') empty_text = _('None') -class OUTable(tables.Table): +class OUTable(Table): name = tables.Column(verbose_name=_('label')) default = tables.BooleanColumn() - class Meta: + class Meta(Table.Meta): model = OrganizationalUnit attrs = {'class': 'main', 'id': 'ou-table'} fields = ('name', 'slug', 'default') empty_text = _('None') -class OuUserRolesTable(tables.Table): +class OuUserRolesTable(Table): name = tables.LinkColumn( viewname='a2-manager-role-members', kwargs={'pk': A('pk')}, accessor='name', verbose_name=_('label') ) @@ -180,7 +188,7 @@ class OuUserRolesTable(tables.Table): content = SafeText('%s (%s)' % (content, _('LDAP'))) return content - class Meta: + class Meta(Table.Meta): model = Role attrs = {'class': 'main plaintable', 'id': 'role-table'} fields = ('name', 'ou') @@ -188,7 +196,7 @@ class OuUserRolesTable(tables.Table): order_by = ('name',) -class UserRolesTable(tables.Table): +class UserRolesTable(Table): name = tables.LinkColumn( viewname='a2-manager-role-members', kwargs={'pk': A('pk')}, accessor='name', verbose_name=_('label') ) @@ -206,7 +214,7 @@ class UserRolesTable(tables.Table): content = SafeText('%s (%s)' % (content, _('LDAP'))) return content - class Meta: + class Meta(Table.Meta): model = Role attrs = {'class': 'main', 'id': 'role-table'} fields = ('name', 'ou') @@ -214,12 +222,12 @@ class UserRolesTable(tables.Table): order_by = ('name', 'ou') -class ServiceTable(tables.Table): +class ServiceTable(Table): ou = tables.Column() name = tables.Column() slug = tables.Column() - class Meta: + class Meta(Table.Meta): model = Service attrs = {'class': 'main', 'id': 'service-table'} fields = ('ou', 'name', 'slug') @@ -227,29 +235,29 @@ class ServiceTable(tables.Table): order_by = ('ou', 'name', 'slug') -class ServiceRolesTable(tables.Table): +class ServiceRolesTable(Table): name = tables.Column(accessor='name', verbose_name=_('name')) - class Meta: + class Meta(Table.Meta): model = Role attrs = {'class': 'main', 'id': 'service-role-table'} fields = ('name',) empty_text = _('No access restriction. All users are allowed to connect to this service.') -class UserAuthorizationsTable(tables.Table): +class UserAuthorizationsTable(Table): client = tables.Column(orderable=False) created = tables.Column() expired = tables.Column() - class Meta: + class Meta(Table.Meta): model = OIDCAuthorization attrs = {'class': 'main plaintable', 'id': 'user-authorizations-table'} fields = ('client', 'created', 'expired') empty_text = _('This user has not granted profile data access to any service yet.') -class InheritanceRolesTable(tables.Table): +class InheritanceRolesTable(Table): name = tables.LinkColumn( viewname='a2-manager-role-members', kwargs={'pk': A('pk')}, accessor='name', verbose_name=_('label') ) @@ -264,7 +272,7 @@ class InheritanceRolesTable(tables.Table): verbose_name='', ) - class Meta: + class Meta(Table.Meta): model = Role attrs = {'class': 'main plaintable', 'id': 'inheritance-role-table'} fields = ('name', 'ou') diff --git a/src/authentic2/manager/templates/authentic2/manager/table.html b/src/authentic2/manager/templates/authentic2/manager/table.html index aad68bf9..0c7c3f1d 100644 --- a/src/authentic2/manager/templates/authentic2/manager/table.html +++ b/src/authentic2/manager/templates/authentic2/manager/table.html @@ -20,6 +20,7 @@ {% block table.tbody.row %} + {% endif %}> {% for column, cell in row.items %} {% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %} {% endfor %} -- 2.30.2