feat: administration — users, roles, stats, audit
DB: - login_history table (user_id, ip, user_agent, timestamp) - Migration v2.5: alter users + create login_history Auth: - Premier utilisateur = admin (is_admin=1) - _log_login() après chaque connexion (register, local-login, OAuth) Backend (app/routers/admin.py): - admin_required middleware (vérifie is_admin) - GET /api/admin/users → liste users + stats par user - POST /api/admin/users → créer user - PUT /api/admin/users/:id → modifier (name, email, password, admin, active) - DELETE /api/admin/users/:id → supprimer + cascade - GET /api/admin/stats → totaux globaux - GET /api/admin/audit → historique login Frontend (settings.html): - Nav Admin visible seulement si userIsAdmin - Users & Roles: stats cards, create/edit/delete users, table complète - Audit Log: historique login avec date, IP, user-agent - CSS professionnel: table-wrap, admin-table, stat-card, role-badge, status-dot
This commit is contained in:
+2
-1
@@ -12,7 +12,7 @@ from starlette.middleware.sessions import SessionMiddleware
|
||||
from app.config import settings
|
||||
from app.db import init_db
|
||||
from app.middleware.csrf import CSRFMiddleware
|
||||
from app.routers import dashboard, board, notes, api, auth, webhooks, collections, my_tasks, workspace, public_api
|
||||
from app.routers import dashboard, board, notes, api, auth, webhooks, collections, my_tasks, workspace, public_api, admin
|
||||
from app.services.gitea_client import gitea
|
||||
from app.services.webhook_outbound import init_webhook_tables
|
||||
|
||||
@@ -58,6 +58,7 @@ app.include_router(webhooks.router)
|
||||
app.include_router(collections.router)
|
||||
app.include_router(my_tasks.router)
|
||||
app.include_router(workspace.router)
|
||||
app.include_router(admin.router)
|
||||
app.include_router(public_api.router)
|
||||
|
||||
app.mount("/static", StaticFiles(directory="static"), name="static")
|
||||
|
||||
Reference in New Issue
Block a user