feat: HUB-19 — rôles du Hub consommés par ObsiGate (registre D3(a)) #228
This commit is contained in:
@@ -40,7 +40,7 @@ from .mfa import (
|
||||
verify_recovery_code,
|
||||
verify_totp,
|
||||
)
|
||||
from .middleware import is_auth_enabled, require_admin, require_auth
|
||||
from .middleware import is_auth_enabled, require_admin_hub, require_auth
|
||||
from .password import hash_password, validate_password_strength, verify_password
|
||||
from .user_store import (
|
||||
create_user,
|
||||
@@ -957,9 +957,13 @@ async def mfa_recovery_login(body: MfaRecoveryRequest, response: Response, reque
|
||||
|
||||
|
||||
# ── Admin endpoints ───────────────────────────────────────────────────
|
||||
# Garde `require_admin_hub` (HUB-19, #228) : `require_admin` + — pour
|
||||
# une requête authentifiée par le canal draco dont le rôle du Hub est
|
||||
# connu — exigence du niveau « administrateur » du registre des rôles.
|
||||
# Sessions natives et rôle inconnu : règles actuelles inchangées.
|
||||
|
||||
@router.get("/admin/users")
|
||||
async def list_users(admin=Depends(require_admin)):
|
||||
async def list_users(admin=Depends(require_admin_hub)):
|
||||
"""List all users (admin only). Password hashes are never included."""
|
||||
return get_all_users()
|
||||
|
||||
@@ -967,7 +971,7 @@ async def list_users(admin=Depends(require_admin)):
|
||||
@router.post("/admin/users")
|
||||
async def create_user_endpoint(
|
||||
req: CreateUserRequest,
|
||||
admin=Depends(require_admin),
|
||||
admin=Depends(require_admin_hub),
|
||||
):
|
||||
"""Create a new user (admin only)."""
|
||||
try:
|
||||
@@ -994,7 +998,7 @@ async def create_user_endpoint(
|
||||
async def update_user_endpoint(
|
||||
username: str,
|
||||
req: UpdateUserRequest,
|
||||
admin=Depends(require_admin),
|
||||
admin=Depends(require_admin_hub),
|
||||
):
|
||||
"""Update a user (admin only)."""
|
||||
updates = req.dict(exclude_none=True)
|
||||
@@ -1007,7 +1011,7 @@ async def update_user_endpoint(
|
||||
@router.delete("/admin/users/{username}")
|
||||
async def delete_user_endpoint(
|
||||
username: str,
|
||||
admin=Depends(require_admin),
|
||||
admin=Depends(require_admin_hub),
|
||||
):
|
||||
"""Delete a user (admin only). Cannot delete own account."""
|
||||
if username == admin["username"]:
|
||||
|
||||
Reference in New Issue
Block a user