Add RBAC: admin user management, audit log, runtime settings, delete PC

This commit is contained in:
2026-07-16 17:28:04 +07:00
parent c2148f334d
commit d1128f4aa3
16 changed files with 690 additions and 24 deletions
+38
View File
@@ -23,6 +23,21 @@
<div class="alert alert-danger mt-3">{{ error }}</div>
{% endif %}
<div id="login-error" class="alert alert-danger mt-3 d-none"></div>
{% if registration_open %}
<hr>
<h6 class="text-center">Или создайте первого администратора</h6>
<form id="register-form">
<div class="mb-3">
<input type="text" class="form-control" id="reg-username" placeholder="Логин" required>
</div>
<div class="mb-3">
<input type="password" class="form-control" id="reg-password" placeholder="Пароль" required>
</div>
<button type="submit" class="btn btn-outline-secondary w-100">Зарегистрироваться</button>
</form>
<div id="register-error" class="alert alert-danger mt-3 d-none"></div>
{% endif %}
</div>
</div>
<div class="text-center mt-3 text-muted small">
@@ -55,5 +70,28 @@ document.getElementById('login-form').addEventListener('submit', async (e) => {
err.classList.remove('d-none');
}
});
{% if registration_open %}
document.getElementById('register-form').addEventListener('submit', async (e) => {
e.preventDefault();
const err = document.getElementById('register-error');
err.classList.add('d-none');
const res = await fetch('/api/auth/register', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
username: document.getElementById('reg-username').value,
password: document.getElementById('reg-password').value,
}),
});
if (res.ok) {
window.location.href = '/';
} else {
const data = await res.json();
err.textContent = data.detail || 'Ошибка регистрации';
err.classList.remove('d-none');
}
});
{% endif %}
</script>
{% endblock %}