71214524f4
- Multi-tenant client/proxy management with Flask+SQLite - Frps server control (start/restart/token rotation) - Generate frpc.ini with shared server token + admin API - Dashboard API integration (live client/proxy status) - RBAC: admin/tenant_admin/user roles - Audit logging for all operations - Systemd service files included - Requires legacy INI format (frp 0.70 TOML auth broken)
31 lines
1.3 KiB
HTML
31 lines
1.3 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}用户 · frps-manager{% endblock %}
|
|
{% block content %}
|
|
<div class="page-header">
|
|
<h1>用户管理</h1>
|
|
<a class="btn btn-primary" href="{{ url_for('users_new') }}">+ 新建用户</a>
|
|
</div>
|
|
<table class="table">
|
|
<thead>
|
|
<tr><th>用户名</th><th>角色</th><th>归属租户</th><th>状态</th><th>最近登录</th><th>操作</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for u in items %}
|
|
<tr>
|
|
<td><strong>{{ u.username }}</strong><br><span class="muted small">{{ u.display_name or '' }}</span></td>
|
|
<td><span class="role-tag role-{{ u.role }}">{{ u.role }}</span></td>
|
|
<td>{{ u.tenant.name if u.tenant else '-' }}</td>
|
|
<td>{% if u.is_active %}<span class="badge badge-ok">启用</span>{% else %}<span class="badge badge-off">禁用</span>{% endif %}</td>
|
|
<td>{{ u.last_login_at|fmt_dt }}</td>
|
|
<td class="actions">
|
|
<a href="{{ url_for('users_edit', uid=u.id) }}">编辑</a>
|
|
<form method="post" action="{{ url_for('users_delete', uid=u.id) }}" style="display:inline"
|
|
onsubmit="return confirm('删除用户 {{ u.username }} 吗?');">
|
|
<button class="link-btn link-danger">删除</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% endblock %} |