{% extends "base.html" %}{% block title %}Grants{% endblock %}{% block body %}

Grants

Temporary approvals, by agent and by the host or server they reach, newest first. Revoking one does not remove standing rules or open defaults, or stop a running operation. All access sources · Standing rules by tool.

Active{% if not history %} · {{ active_total }}{% endif %}History
{% if active_total %}
{% endif %}
{% for a in groups %}

{{ a.name }}{% if a.agent and a.agent.disabled %} Suspended{% endif %}

{{ a.active }} active · {{ a.hosts|length }} host{{ '' if a.hosts|length == 1 else 's' }} · last approval {{ a.latest.strftime('%m-%d %H:%M') }}
{% if a.active %}
{% endif %}
{% for h in a.hosts %}
{{ h.kind|upper }}{{ h.name }}{{ h.active }} active · last {{ h.latest.strftime('%m-%d %H:%M') }}
{% for ap in h.approvals %}
{{ ap.label }} {{ ap.approved_at.strftime('%m-%d %H:%M') }} {% if ap.state == 'active' %}{{ ap.remaining }}{% else %}{{ 'revoked' if ap.state == 'revoked' else 'used up / expired' }}{% endif %} {% if ap.uses %}{{ ap.uses|sum }} use{{ '' if ap.uses|sum == 1 else 's' }} left{% endif %} {% if ap.session %}session {{ ap.session[:12] }}{% endif %}
{% for g in ap.grants[:4] %}{{ g.pattern }}{% endfor %} {% if ap.grants|length > 4 %}
{{ ap.grants|length - 4 }} more path{{ '' if ap.grants|length == 5 else 's' }}{% for g in ap.grants[4:] %}{{ g.pattern }}{% endfor %}
{% endif %}
{% for g, c in ap.constraints if c %}
{{ constraint_label(c) }}{% with constraints=c %}{% include "_constraints.html" %}{% endwith %}
{% endfor %} {% if ap.request %}
{{ ap.request.reason[:200] }} · approval
{% endif %}
{% if ap.revoke %}
{% if ap.elsewhere %}
also revokes it on {{ ap.elsewhere }} other host{{ '' if ap.elsewhere == 1 else 's' }}
{% endif %}
{% endif %}
{% endfor %}
{% endfor %}
{% else %}

{% if history %}No grants yet. Approving a request creates them.{% else %}No active grants. Standing rules and resource defaults still apply; see history.{% endif %}

{% endfor %} {% endblock %}