apac-ops-bot/backend/app/schemas/auth.py
SamoilenkoVadym b284cadb86 Add test user authentication and RBAC admin panel
Implemented simple authentication for testing and admin panel for user management:

Backend:
- Add simple email/password login for test users (admin@test.local, user@test.local)
- Implement RBAC (Role-Based Access Control) with Permission enum
- Create admin endpoints for user management and system analytics
- Add bcrypt password hashing for test users
- Create script to generate test users in database

Frontend:
- Add SimpleLogin component for test authentication
- Create AdminPanel with user management and system analytics
- Add role-based navigation (Admin tab visible only for admins)
- Update AuthContext to support both MSAL and simple login
- Add API methods for admin operations

Features:
- Admins can view all users, manage roles, activate/deactivate accounts
- Admins can view system-wide analytics (users, conversations, tokens, costs)
- Regular users only see their own chats and usage
- Role badges in UI show user role (user/admin/superadmin)

Note: Simple authentication is for testing only. Production uses Azure AD MSAL.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-27 20:05:54 +00:00

67 lines
1.3 KiB
Python

"""
Authentication Schemas
Pydantic models for authentication requests and responses
"""
from pydantic import BaseModel, EmailStr
from typing import Optional
class MSALCallbackRequest(BaseModel):
"""MSAL callback request with ID token"""
id_token: str
class SimpleLoginRequest(BaseModel):
"""Simple login request with email and password (for test users)"""
email: EmailStr
password: str
ip_address: Optional[str] = None
user_agent: Optional[str] = None
class LoginRequest(BaseModel):
"""Login request with Azure AD token"""
id_token: str
ip_address: Optional[str] = None
user_agent: Optional[str] = None
class LoginResponse(BaseModel):
"""Login response with tokens and user info"""
access_token: str
refresh_token: str
token_type: str
expires_in: int
user: dict
class RefreshTokenRequest(BaseModel):
"""Refresh token request"""
refresh_token: str
class RefreshTokenResponse(BaseModel):
"""Refresh token response"""
access_token: str
token_type: str
expires_in: int
class UserInfo(BaseModel):
"""Current user information"""
id: str
email: EmailStr
display_name: str
role: str
is_active: bool
class Config:
from_attributes = True
class LogoutResponse(BaseModel):
"""Logout response"""
message: str
success: bool