Projet

Général

Profil

0001-manager-group-roles-by-OU-on-user-page-24397.patch

Nicolas Roche, 06 août 2020 16:10

Télécharger (5,01 ko)

Voir les différences:

Subject: [PATCH] manager: group roles by OU on user page (#24397)

 .../templates/authentic2/manager/user_detail.html   |  4 ++--
 src/authentic2/manager/user_views.py                |  1 +
 tests/test_manager.py                               | 13 ++++++++++++-
 3 files changed, 15 insertions(+), 3 deletions(-)
src/authentic2/manager/templates/authentic2/manager/user_detail.html
65 65

  
66 66
  {% block other_actions %}{{ block.super }}{% endblock %}
67 67

  
68 68
  {% if roles_by_ou or can_change_roles %}
69 69
  <div class="user-roles">
70 70
    <h3>{% trans "Roles" %}</h3>
71 71
    <ul>
72 72
      {% for ou, ou_roles in roles_by_ou.items %}
73
        {% if multiple_ou %}
73
        {% if have_roles_on_multiple_ou %}
74 74
	<li>{% if ou %}{{ ou }}{% else %}{% trans "All organizational units" %}{% endif %}
75 75
              <ul>
76 76
        {% endif %}
77 77
              {% for role in ou_roles %}
78 78
                <li {% if role.description %}title="{{ role.description }}"{% endif %}>
79 79
                <a href="{% url "a2-manager-role-members" pk=role.pk %}">{{ role }}</a></li>
80 80
              {% endfor %}
81
        {% if multiple_ou %}
81
        {% if have_roles_on_multiple_ou %}
82 82
              </ul>
83 83
          </li>
84 84
        {% endif %}
85 85
      {% endfor %}
86 86
    </ul>
87 87

  
88 88
    {% if can_change_roles %}
89 89
      <button onclick="window.location.href = '{% url "a2-manager-user-roles" pk=object.pk %}?search-ou={% firstof object.ou.pk default_ou.pk %}'; return false">{% trans "Modify roles" %}</button>
src/authentic2/manager/user_views.py
336 336
    def get_context_data(self, **kwargs):
337 337
        kwargs['default_ou'] = get_default_ou
338 338
        roles = self.object.roles_and_parents().order_by('ou__name', 'name')
339 339
        roles_by_ou = collections.OrderedDict()
340 340
        for role in roles:
341 341
            roles_by_ou.setdefault(role.ou.name if role.ou else '', []).append(role)
342 342
        kwargs['roles'] = roles
343 343
        kwargs['roles_by_ou'] = roles_by_ou
344
        kwargs['have_roles_on_multiple_ou'] = len(roles_by_ou.keys()) > 1
344 345
        # show modify roles button only if something is possible
345 346
        kwargs['can_change_roles'] = self.has_perm_on_roles(self.request.user, self.object)
346 347
        user_data = []
347 348
        user_data += [data for datas in hooks.call_hooks('manager_user_data', self, self.object)
348 349
                      for data in datas]
349 350
        kwargs['user_data'] = user_data
350 351
        ctx = super(UserDetailView, self).get_context_data(**kwargs)
351 352
        return ctx
tests/test_manager.py
127 127
    resp = app.get('/logout/').maybe_follow()
128 128
    resp = app.get(relative_url, status=200)
129 129
    resp.form.set('new_password1', '1234==aA')
130 130
    resp.form.set('new_password2', '1234==aA')
131 131
    resp = resp.form.submit().follow()
132 132
    assert str(app.session['_auth_user_id']) == str(simple_user.pk)
133 133

  
134 134

  
135
def test_manager_user_detail_by_uuid(app, superuser, simple_user):
135
def test_manager_user_detail_by_uuid(app, superuser, simple_user, simple_role):
136
    simple_user.roles.add(simple_role)
136 137
    url = reverse('a2-manager-user-by-uuid-detail', kwargs={'slug': simple_user.uuid})
137 138
    resp = login(app, superuser, url)
138 139
    assert '<h3>Actions</h3>' in resp.text
139 140
    assert simple_user.first_name.encode('utf-8') in resp.content
141
    assert 'simple role' in resp.html.find('div', {'class': 'user-roles'}).ul.li.text
142

  
143
    # if user has roles on multiple, roles are grouped by OU
144
    simple_user.roles.add(Role.objects.create(name='global role', slug='global-role', ou=None))
145
    resp = app.get(url)
146
    html_roles = resp.html.find('div', {'class': 'user-roles'})
147
    assert 'Default organizational unit' in html_roles.ul.find_all('li', recursive=False)[0].next
148
    assert 'simple role' in html_roles.ul.find_all('li', recursive=False)[0].ul.li.text
149
    assert 'All organizational units' in html_roles.ul.find_all('li', recursive=False)[1].next
150
    assert 'global role' in html_roles.ul.find_all('li', recursive=False)[1].ul.li.text
140 151

  
141 152

  
142 153
def test_manager_user_edit_by_uuid(app, superuser, simple_user):
143 154
    url = reverse('a2-manager-user-by-uuid-edit', kwargs={'slug': simple_user.uuid})
144 155
    resp = login(app, superuser, url)
145 156
    assert '<h3>Actions</h3>' not in resp.text
146 157
    assert simple_user.first_name.encode('utf-8') in resp.content
147 158

  
148
-