Initial commit
This commit is contained in:
211
types/auth.ts
Normal file
211
types/auth.ts
Normal file
@@ -0,0 +1,211 @@
|
||||
/**
|
||||
* Types d'authentification pour BTP Xpress
|
||||
* Synchronisé avec le backend Java et Keycloak
|
||||
*/
|
||||
|
||||
// Énumération des rôles utilisateur (synchronisée avec UserRole.java)
|
||||
export enum UserRole {
|
||||
ADMIN = 'ADMIN',
|
||||
MANAGER = 'MANAGER',
|
||||
CHEF_CHANTIER = 'CHEF_CHANTIER',
|
||||
OUVRIER = 'OUVRIER',
|
||||
COMPTABLE = 'COMPTABLE',
|
||||
GESTIONNAIRE_PROJET = 'GESTIONNAIRE_PROJET',
|
||||
CLIENT = 'CLIENT'
|
||||
}
|
||||
|
||||
// Statut utilisateur (synchronisé avec UserStatus.java)
|
||||
export enum UserStatus {
|
||||
PENDING = 'PENDING',
|
||||
APPROVED = 'APPROVED',
|
||||
REJECTED = 'REJECTED',
|
||||
SUSPENDED = 'SUSPENDED',
|
||||
ACTIVE = 'ACTIVE',
|
||||
INACTIVE = 'INACTIVE'
|
||||
}
|
||||
|
||||
// Interface utilisateur complète
|
||||
export interface User {
|
||||
id: string;
|
||||
email: string;
|
||||
nom: string;
|
||||
prenom: string;
|
||||
username: string;
|
||||
firstName?: string;
|
||||
lastName?: string;
|
||||
fullName?: string;
|
||||
role: UserRole;
|
||||
roles: string[];
|
||||
permissions: string[];
|
||||
highestRole?: string;
|
||||
actif: boolean;
|
||||
status: UserStatus;
|
||||
telephone?: string;
|
||||
adresse?: string;
|
||||
codePostal?: string;
|
||||
ville?: string;
|
||||
entreprise?: string;
|
||||
siret?: string;
|
||||
secteurActivite?: string;
|
||||
effectif?: number;
|
||||
commentaireAdmin?: string;
|
||||
dateCreation: Date;
|
||||
dateModification: Date;
|
||||
derniereConnexion?: Date;
|
||||
|
||||
// Propriétés calculées pour la compatibilité
|
||||
isAdmin: boolean;
|
||||
isManager: boolean;
|
||||
isEmployee: boolean;
|
||||
isClient: boolean;
|
||||
}
|
||||
|
||||
// Interface pour les informations utilisateur simplifiées (AuthContext)
|
||||
export interface UserInfo {
|
||||
id: string;
|
||||
username: string;
|
||||
email: string;
|
||||
firstName?: string;
|
||||
lastName?: string;
|
||||
fullName?: string;
|
||||
roles: string[];
|
||||
permissions: string[];
|
||||
highestRole?: string;
|
||||
isAdmin: boolean;
|
||||
isManager: boolean;
|
||||
isEmployee: boolean;
|
||||
isClient: boolean;
|
||||
}
|
||||
|
||||
// État d'authentification
|
||||
export interface AuthState {
|
||||
isAuthenticated: boolean;
|
||||
isLoading: boolean;
|
||||
user: UserInfo | null;
|
||||
token: string | null;
|
||||
refreshToken: string | null;
|
||||
error: string | null;
|
||||
}
|
||||
|
||||
// Contexte d'authentification
|
||||
export interface AuthContextType extends AuthState {
|
||||
login: () => Promise<void>;
|
||||
logout: () => Promise<void>;
|
||||
refreshAuth: () => Promise<void>;
|
||||
hasRole: (role: string) => boolean;
|
||||
hasAnyRole: (roles: string[]) => boolean;
|
||||
hasPermission: (permission: string) => boolean;
|
||||
isRoleHigher: (role: string) => boolean;
|
||||
updateToken: (minValidity?: number) => Promise<boolean>;
|
||||
}
|
||||
|
||||
// Permissions système
|
||||
export interface Permission {
|
||||
id: string;
|
||||
name: string;
|
||||
description: string;
|
||||
resource: string;
|
||||
action: string;
|
||||
}
|
||||
|
||||
// Données de connexion
|
||||
export interface LoginCredentials {
|
||||
email: string;
|
||||
password: string;
|
||||
}
|
||||
|
||||
// Réponse d'authentification
|
||||
export interface AuthResponse {
|
||||
user: UserInfo;
|
||||
token: string;
|
||||
refreshToken: string;
|
||||
expiresIn: number;
|
||||
}
|
||||
|
||||
// Données d'inscription
|
||||
export interface RegisterData {
|
||||
email: string;
|
||||
nom: string;
|
||||
prenom: string;
|
||||
password: string;
|
||||
telephone?: string;
|
||||
adresse?: string;
|
||||
codePostal?: string;
|
||||
ville?: string;
|
||||
entreprise?: string;
|
||||
siret?: string;
|
||||
secteurActivite?: string;
|
||||
effectif?: number;
|
||||
}
|
||||
|
||||
// Données de profil utilisateur
|
||||
export interface UserProfile {
|
||||
id: string;
|
||||
email: string;
|
||||
nom: string;
|
||||
prenom: string;
|
||||
telephone?: string;
|
||||
adresse?: string;
|
||||
codePostal?: string;
|
||||
ville?: string;
|
||||
entreprise?: string;
|
||||
siret?: string;
|
||||
secteurActivite?: string;
|
||||
effectif?: number;
|
||||
}
|
||||
|
||||
// Changement de mot de passe
|
||||
export interface PasswordChangeData {
|
||||
currentPassword: string;
|
||||
newPassword: string;
|
||||
confirmPassword: string;
|
||||
}
|
||||
|
||||
// Reset de mot de passe
|
||||
export interface PasswordResetData {
|
||||
email: string;
|
||||
}
|
||||
|
||||
export interface PasswordResetConfirmData {
|
||||
token: string;
|
||||
newPassword: string;
|
||||
confirmPassword: string;
|
||||
}
|
||||
|
||||
// Utilitaires de rôles
|
||||
export const RoleHierarchy: Record<UserRole, number> = {
|
||||
[UserRole.ADMIN]: 1,
|
||||
[UserRole.MANAGER]: 2,
|
||||
[UserRole.GESTIONNAIRE_PROJET]: 3,
|
||||
[UserRole.CHEF_CHANTIER]: 4,
|
||||
[UserRole.COMPTABLE]: 4,
|
||||
[UserRole.OUVRIER]: 5,
|
||||
[UserRole.CLIENT]: 6
|
||||
};
|
||||
|
||||
export const RoleDisplayNames: Record<UserRole, string> = {
|
||||
[UserRole.ADMIN]: 'Administrateur',
|
||||
[UserRole.MANAGER]: 'Manager',
|
||||
[UserRole.GESTIONNAIRE_PROJET]: 'Gestionnaire de projet',
|
||||
[UserRole.CHEF_CHANTIER]: 'Chef de chantier',
|
||||
[UserRole.COMPTABLE]: 'Comptable',
|
||||
[UserRole.OUVRIER]: 'Ouvrier',
|
||||
[UserRole.CLIENT]: 'Client'
|
||||
};
|
||||
|
||||
// Fonctions utilitaires
|
||||
export const isRoleHigher = (role1: UserRole, role2: UserRole): boolean => {
|
||||
return RoleHierarchy[role1] < RoleHierarchy[role2];
|
||||
};
|
||||
|
||||
export const isManagementRole = (role: UserRole): boolean => {
|
||||
return [UserRole.ADMIN, UserRole.MANAGER, UserRole.GESTIONNAIRE_PROJET].includes(role);
|
||||
};
|
||||
|
||||
export const isFieldRole = (role: UserRole): boolean => {
|
||||
return [UserRole.CHEF_CHANTIER, UserRole.OUVRIER].includes(role);
|
||||
};
|
||||
|
||||
export const isAdministrativeRole = (role: UserRole): boolean => {
|
||||
return [UserRole.ADMIN, UserRole.COMPTABLE].includes(role);
|
||||
};
|
||||
Reference in New Issue
Block a user