fix(usermanager): UI improvements
- show groups in user detail view - show DN in user detail view - show DN in group list view
This commit is contained in:
parent
961fc09acb
commit
cbfcafbb18
6
lumi2/static/css/bootstrap.css
vendored
6
lumi2/static/css/bootstrap.css
vendored
@ -4740,8 +4740,8 @@ textarea.form-control-lg {
|
|||||||
|
|
||||||
.list-group {
|
.list-group {
|
||||||
--bs-list-group-color: #212529;
|
--bs-list-group-color: #212529;
|
||||||
--bs-list-group-bg: #fff;
|
--bs-list-group-bg: #FCF7E3;
|
||||||
--bs-list-group-border-color: rgba(0, 0, 0, 0.125);
|
--bs-list-group-border-color: rgba(121, 159, 147, 0.5);
|
||||||
--bs-list-group-border-width: 2px;
|
--bs-list-group-border-width: 2px;
|
||||||
--bs-list-group-border-radius: 0.375rem;
|
--bs-list-group-border-radius: 0.375rem;
|
||||||
--bs-list-group-item-padding-x: 1rem;
|
--bs-list-group-item-padding-x: 1rem;
|
||||||
@ -4752,7 +4752,7 @@ textarea.form-control-lg {
|
|||||||
--bs-list-group-action-active-color: #3A3533;
|
--bs-list-group-action-active-color: #3A3533;
|
||||||
--bs-list-group-action-active-bg: #e9ecef;
|
--bs-list-group-action-active-bg: #e9ecef;
|
||||||
--bs-list-group-disabled-color: #6c757d;
|
--bs-list-group-disabled-color: #6c757d;
|
||||||
--bs-list-group-disabled-bg: #fff;
|
--bs-list-group-disabled-bg: #FCF7E3;
|
||||||
--bs-list-group-active-color: #fff;
|
--bs-list-group-active-color: #fff;
|
||||||
--bs-list-group-active-bg: #72BAB0;
|
--bs-list-group-active-bg: #72BAB0;
|
||||||
--bs-list-group-active-border-color: #72BAB0;
|
--bs-list-group-active-border-color: #72BAB0;
|
||||||
|
@ -15,19 +15,23 @@
|
|||||||
<table class="table table-hover">
|
<table class="table table-hover">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">Group Name</th>
|
<th class="text-center" scope="col">Group Name</th>
|
||||||
<th scope="col">Number of Members</th>
|
<th class="text-center" scope="col">Number of Members</th>
|
||||||
|
<th class="text-muted text-center" scope="col">DN</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for group in groups | sort %}
|
{% for group in groups | sort %}
|
||||||
<tr class="clickable" onclick="window.location='{{ url_for('usermanager.group_update', groupname=group.groupname) }}'" style="cursor: pointer">
|
<tr class="clickable" onclick="window.location='{{ url_for('usermanager.group_update', groupname=group.groupname) }}'" style="cursor: pointer">
|
||||||
<th scope="row">
|
<th class="text-center" scope="row">
|
||||||
<a class="text-decoration-none fw-bold fs-4" href="{{ url_for('usermanager.group_update', groupname=group.groupname) }}">{{ group.groupname }}</a>
|
<a class="text-decoration-none fw-bold fs-4" href="{{ url_for('usermanager.group_update', groupname=group.groupname) }}">{{ group.groupname }}</a>
|
||||||
</th>
|
</th>
|
||||||
<td class="align-middle fs-5">
|
<td class="align-middle fs-5 text-center">
|
||||||
{{ group.members|length }}
|
{{ group.members|length }}
|
||||||
</td>
|
</td>
|
||||||
|
<td class="align-middle fs-5 text-muted text-center">
|
||||||
|
{{ group.get_dn() }}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<div class="col-sm text-center align-self-center m-2">
|
<div class="col-sm text-center align-self-center m-2">
|
||||||
<ul class="list-group">
|
<ul class="list-group">
|
||||||
{% for groupname in deleted_groups %}
|
{% for groupname in deleted_groups %}
|
||||||
<li class="list-group-item">{{ groupname }}</li>
|
<li class="list-group-item"><a href="{{ url_for('usermanager.group_update', groupname=groupname) }}">{{ groupname }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-4 vstack gap-1 align-self-center m-2">
|
<div class="col-sm-4 vstack gap-1 align-self-center m-2">
|
||||||
|
<div class="text-muted"><b>DN:</b> {{ user.get_dn() }}</div>
|
||||||
<div><b>Username:</b> {{ user.username }}</div>
|
<div><b>Username:</b> {{ user.username }}</div>
|
||||||
<div><b>Email:</b> {{ user.email }}</div>
|
<div><b>Email:</b> {{ user.email }}</div>
|
||||||
<div><b>First Name:</b> {{ user.first_name }}</div>
|
<div><b>First Name:</b> {{ user.first_name }}</div>
|
||||||
@ -24,5 +25,17 @@
|
|||||||
href="{{ url_for('usermanager.user_delete', username=user.username) }}"
|
href="{{ url_for('usermanager.user_delete', username=user.username) }}"
|
||||||
role="button"><i class="bi-person-slash"></i> Delete</a>
|
role="button"><i class="bi-person-slash"></i> Delete</a>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-sm-12 text-center align-self-center m-2">
|
||||||
|
{% with groups = user.get_groups() %}
|
||||||
|
{% if groups %}
|
||||||
|
<p>Member of:</p>
|
||||||
|
{% for group in groups %}
|
||||||
|
<a class="btn btn-secondary" role="button" href="{{ url_for('usermanager.group_update', groupname=group.groupname) }}">{{ group.groupname }}</a>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<p class="text-muted">This user is not a member of any group.</p>
|
||||||
|
{% endif %}
|
||||||
|
{% endwith %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endblock content %}
|
{% endblock content %}
|
||||||
|
@ -11,6 +11,7 @@ from PIL.JpegImagePlugin import JpegImageFile
|
|||||||
from flask import current_app
|
from flask import current_app
|
||||||
|
|
||||||
from lumi2.exceptions import InvalidStringFormatException, InvalidImageException
|
from lumi2.exceptions import InvalidStringFormatException, InvalidImageException
|
||||||
|
import lumi2.ldap as ldap
|
||||||
|
|
||||||
class User:
|
class User:
|
||||||
"""Class model for a user.
|
"""Class model for a user.
|
||||||
@ -428,6 +429,15 @@ class User:
|
|||||||
return f'/static/images/users/{self.username}/thumbnail.jpg'
|
return f'/static/images/users/{self.username}/thumbnail.jpg'
|
||||||
|
|
||||||
|
|
||||||
|
def get_groups(self):
|
||||||
|
"""Returns the set of groups which this user is a member of."""
|
||||||
|
|
||||||
|
conn = ldap.get_connection()
|
||||||
|
groups = ldap.get_groups_of_user(conn, self)
|
||||||
|
conn.unbind()
|
||||||
|
return groups
|
||||||
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
return self.username == other.username
|
return self.username == other.username
|
||||||
|
|
||||||
|
4
scss/bootstrap.scss
vendored
4
scss/bootstrap.scss
vendored
@ -39,4 +39,8 @@ $border-color: #DEDABF;
|
|||||||
// Forms
|
// Forms
|
||||||
$input-border-color: #A49E68;
|
$input-border-color: #A49E68;
|
||||||
|
|
||||||
|
// List groups
|
||||||
|
$list-group-bg: $body-bg;
|
||||||
|
$list-group-border-color: rgba($info, 0.5);
|
||||||
|
|
||||||
@import "../node_modules/bootstrap/scss/bootstrap";
|
@import "../node_modules/bootstrap/scss/bootstrap";
|
||||||
|
Loading…
Reference in New Issue
Block a user