Projet

Général

Profil

0001-OU-attribute-to-hide-username-on-user-add-25669.patch

Emmanuel Cazenave, 06 mars 2019 11:44

Télécharger (4,87 ko)

Voir les différences:

Subject: [PATCH] OU attribute to hide username on user add (#25669)

 .../0018_organizationalunit_show_username.py  | 20 +++++++++++++++++
 src/authentic2/a2_rbac/models.py              |  5 +++++
 src/authentic2/manager/forms.py               |  5 ++++-
 src/authentic2/manager/user_views.py          |  9 ++++++--
 tests/test_manager.py                         | 22 +++++++++++++++++++
 5 files changed, 58 insertions(+), 3 deletions(-)
 create mode 100644 src/authentic2/a2_rbac/migrations/0018_organizationalunit_show_username.py
src/authentic2/a2_rbac/migrations/0018_organizationalunit_show_username.py
1
# -*- coding: utf-8 -*-
2
# Generated by Django 1.11.18 on 2019-03-06 10:21
3
from __future__ import unicode_literals
4

  
5
from django.db import migrations, models
6

  
7

  
8
class Migration(migrations.Migration):
9

  
10
    dependencies = [
11
        ('a2_rbac', '0017_organizationalunit_user_can_reset_password'),
12
    ]
13

  
14
    operations = [
15
        migrations.AddField(
16
            model_name='organizationalunit',
17
            name='show_username',
18
            field=models.BooleanField(default=True, verbose_name='Show username'),
19
        ),
20
    ]
src/authentic2/a2_rbac/models.py
40 40
        default=False,
41 41
        verbose_name=_('Validate emails'))
42 42

  
43
    show_username = models.BooleanField(
44
        blank=True,
45
        default=True,
46
        verbose_name=_('Show username'))
47

  
43 48
    admin_perms = GenericRelation(rbac_utils.get_permission_model_name(),
44 49
                                  content_type_field='target_ct',
45 50
                                  object_id_field='target_id')
src/authentic2/manager/forms.py
658 658

  
659 659
    class Meta:
660 660
        model = get_ou_model()
661
        fields = ('name', 'default', 'username_is_unique', 'email_is_unique', 'validate_emails')
661
        fields = (
662
            'name', 'default', 'username_is_unique', 'email_is_unique', 'validate_emails',
663
            'show_username'
664
        )
662 665

  
663 666

  
664 667
def get_role_form_class():
src/authentic2/manager/user_views.py
114 114

  
115 115
    def get_form_kwargs(self):
116 116
        kwargs = super(UserAddView, self).get_form_kwargs()
117
        qs = self.request.user.ous_with_perm('custom_user.add_user')
118
        self.ou = qs.get(pk=self.kwargs['ou_pk'])
119 117
        kwargs['ou'] = self.ou
120 118
        return kwargs
121 119

  
120
    def get_form_class(self):
121
        qs = self.request.user.ous_with_perm('custom_user.add_user')
122
        self.ou = qs.get(pk=self.kwargs['ou_pk'])
123
        return super(UserAddView, self).get_form_class()
124

  
122 125
    def get_fields(self):
123 126
        fields = list(self.fields)
127
        if not self.ou.show_username:
128
            fields.remove('username')
124 129
        i = fields.index('generate_password')
125 130
        if self.request.user.is_superuser and \
126 131
                'is_superuser' not in self.fields:
tests/test_manager.py
837 837
    response = app.get(url, params={'field_id': field_id, 'term': 'Admin édou'})
838 838
    assert len(response.json['results']) == 1
839 839
    assert response.json['results'][0]['text'] == u'La Bédoule - Administrateur'
840

  
841

  
842
def test_ou_hide_username(admin, app, db):
843
    OU = get_ou_model()
844
    some_ou = OU.objects.create(name=u'Some Ou', show_username=False)
845

  
846
    login(app, admin, '/manage/')
847
    url = u'/manage/users/%s/add/' % some_ou.pk
848
    response = app.get(url)
849
    q = response.pyquery.remove_namespaces()
850
    assert len(q('p[id="id_username_p"]')) == 0
851

  
852
    form = response.form
853
    form.set('first_name', 'John')
854
    form.set('last_name', 'Doe')
855
    form.set('email', 'john.doe@gmail.com')
856
    form.set('password1', 'ABcd1234')
857
    form.set('password2', 'ABcd1234')
858
    form.submit()
859

  
860
    User = get_user_model()
861
    assert User.objects.get(email='john.doe@gmail.com')
840
-