{% extends "base.html" %} {% block title %}Portal Users{% endblock %} {% block style %} form.add { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) auto; gap: 10px; align-items: end; } form.add label { font-weight: 600; font-size: 13px; } form.add input, form.add select { display: block; width: 100%; margin-top: 4px; } table.plain { width: 100%; border-collapse: collapse; font-size: 13px; } table.plain th, table.plain td { text-align: left; padding: 8px; border-bottom: 1px solid var(--line); vertical-align: middle; } table.plain th { color: #3b4757; font-size: 12px; text-transform: uppercase; letter-spacing: .4px; background: var(--head); } td form { display: inline-flex; gap: 6px; margin: 0 8px 0 0; } td form input { width: 150px; padding: 4px 8px; } td form select, td form button { padding: 4px 8px; } .tag { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 12px; font-weight: 600; background: var(--head); } .tag.off { background: var(--fail-bg); color: var(--fail); } .tag.lock, .tag.change { background: var(--review-bg); color: var(--review); } .tag.on { background: var(--pass-bg); color: var(--pass); } @media (max-width: 760px) { form.add { grid-template-columns: 1fr; } } {% endblock %} {% block content %}

Portal Users

Admin: everything, and this page. Operator: see everything, Start / Stop a Run. Viewer: see only. Users are disabled, never deleted.

{% if error %}{% endif %} {% if message %}
{{ message }}
{% endif %}

Add a user

They change the first password at their first Sign-in.

{% for u in users %} {% endfor %}
UserRoleStatusAddedChange
{{ u.username }}
{{ u.display_name }}
{{ u.role }} {% if u.disabled %}Disabled {% else %}Active{% endif %} {% if u.must_change %}Must change password{% endif %} {% if u.locked_until %}Locked until {{ u.locked_until | usdate }}{% endif %} {{ u.created_at | usdate }}
by {{ u.created_by }}
{% if u.disabled %}
{% elif u.username != user.username %}
{% endif %}
{% endblock %}