Files
Your Name 71214524f4 feat: frps-manager v1.0 - frp 0.70.1 multi-tenant web management system
- 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)
2026-08-10 14:17:49 +08:00

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 %}