mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-17 04:06:44 +02:00
feat(rust) : serveur réécrit en Rust, Node retiré ; Calendrier en tête du menu (#571)
- Serveur Rust (server-rs/, axum + sqlx) : les 148 adresses de l'API, l'interface, les migrations de démarrage et les tâches de fond ; même comportement que Node (banc : 2027 cas, 0 écart hors écarts déclarés USERS-02, RAPPRO-21, R4, R5). - Node retiré : server/, dépendances serveur, image Docker sans Node (51 Mo), docker-compose à un seul service applicatif. - R4 : écritures d'un autre site refusées (Sec-Fetch-Site / Origin). - R5 : « aujourd'hui » et sauvegarde automatique à l'heure de Paris. - R6 : mainteneur dans .github/CODEOWNERS. - Menu latéral : Accueil puis Calendrier en tête. - Plan et état : docs/PLAN-MIGRATION-RUST.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ke2qyS8rgacP3ap5iezDbM
This commit is contained in:
1 parent
6760f43e87
commit
600627c632
146 files changed
+31521
-20331
No files matched your search
@@ -0,0 +1,207 @@
|
||||
{
|
||||
"dashboard": {
|
||||
"admin": [
|
||||
"view"
|
||||
],
|
||||
"directeur": [
|
||||
"view"
|
||||
],
|
||||
"manager": [
|
||||
"view"
|
||||
],
|
||||
"employee": [
|
||||
"view"
|
||||
]
|
||||
},
|
||||
"calendar": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"directeur": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"manager": [
|
||||
"view",
|
||||
"create",
|
||||
"edit"
|
||||
],
|
||||
"employee": [
|
||||
"view"
|
||||
]
|
||||
},
|
||||
"orders": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"directeur": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"manager": [
|
||||
"view",
|
||||
"create",
|
||||
"edit"
|
||||
],
|
||||
"employee": []
|
||||
},
|
||||
"deliveries": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete",
|
||||
"validate"
|
||||
],
|
||||
"directeur": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete",
|
||||
"validate"
|
||||
],
|
||||
"manager": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"validate"
|
||||
],
|
||||
"employee": []
|
||||
},
|
||||
"reconciliation": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete",
|
||||
"validate"
|
||||
],
|
||||
"directeur": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"validate"
|
||||
],
|
||||
"manager": [],
|
||||
"employee": []
|
||||
},
|
||||
"publicity": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"directeur": [
|
||||
"view"
|
||||
],
|
||||
"manager": [
|
||||
"view"
|
||||
],
|
||||
"employee": [
|
||||
"view"
|
||||
]
|
||||
},
|
||||
"customer-orders": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"directeur": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"manager": [
|
||||
"view",
|
||||
"create",
|
||||
"edit"
|
||||
],
|
||||
"employee": [
|
||||
"view",
|
||||
"create"
|
||||
]
|
||||
},
|
||||
"dlc": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"directeur": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete"
|
||||
],
|
||||
"manager": [
|
||||
"view",
|
||||
"create",
|
||||
"edit"
|
||||
],
|
||||
"employee": [
|
||||
"view",
|
||||
"create"
|
||||
]
|
||||
},
|
||||
"tasks": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete",
|
||||
"validate"
|
||||
],
|
||||
"directeur": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete",
|
||||
"validate"
|
||||
],
|
||||
"manager": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"validate"
|
||||
],
|
||||
"employee": [
|
||||
"view"
|
||||
]
|
||||
},
|
||||
"avoir": {
|
||||
"admin": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete",
|
||||
"validate"
|
||||
],
|
||||
"directeur": [
|
||||
"view",
|
||||
"create",
|
||||
"edit",
|
||||
"delete",
|
||||
"validate"
|
||||
],
|
||||
"manager": [
|
||||
"view",
|
||||
"create"
|
||||
],
|
||||
"employee": []
|
||||
}
|
||||
}
|
||||
+14
-82
@@ -1,5 +1,6 @@
|
||||
// Système de permissions hardcodé par module
|
||||
// Remplace l'ancien système flexible basé sur la base de données
|
||||
import PERMISSIONS_DATA from "./permissions.json";
|
||||
|
||||
export type Permission = 'view' | 'create' | 'edit' | 'delete' | 'validate';
|
||||
export type Role = 'admin' | 'directeur' | 'manager' | 'employee';
|
||||
@@ -15,88 +16,19 @@ export type Module =
|
||||
| 'tasks'
|
||||
| 'avoir';
|
||||
|
||||
// Définition des permissions par module et par rôle
|
||||
const PERMISSIONS: Record<Module, Record<Role, Permission[]>> = {
|
||||
// Tableau de bord - tous les rôles peuvent le voir
|
||||
dashboard: {
|
||||
admin: ['view'],
|
||||
directeur: ['view'],
|
||||
manager: ['view'],
|
||||
employee: ['view']
|
||||
},
|
||||
|
||||
// Calendrier - Admin/Directeur tout, Manager tout sauf delete, Employé view
|
||||
calendar: {
|
||||
admin: ['view', 'create', 'edit', 'delete'],
|
||||
directeur: ['view', 'create', 'edit', 'delete'],
|
||||
manager: ['view', 'create', 'edit'],
|
||||
employee: ['view']
|
||||
},
|
||||
|
||||
// Commandes - Admin/Directeur tout, Manager tout sauf delete, Employé aucun accès
|
||||
orders: {
|
||||
admin: ['view', 'create', 'edit', 'delete'],
|
||||
directeur: ['view', 'create', 'edit', 'delete'],
|
||||
manager: ['view', 'create', 'edit'],
|
||||
employee: []
|
||||
},
|
||||
|
||||
// Livraisons - Admin/Directeur tout + validate, Manager tout sauf delete + validate, Employé aucun accès
|
||||
deliveries: {
|
||||
admin: ['view', 'create', 'edit', 'delete', 'validate'],
|
||||
directeur: ['view', 'create', 'edit', 'delete', 'validate'],
|
||||
manager: ['view', 'create', 'edit', 'validate'],
|
||||
employee: []
|
||||
},
|
||||
|
||||
// Rapprochement - Admin tout y compris validate, Directeur tout sauf delete, Manager/Employé rien
|
||||
reconciliation: {
|
||||
admin: ['view', 'create', 'edit', 'delete', 'validate'],
|
||||
directeur: ['view', 'create', 'edit', 'validate'],
|
||||
manager: [],
|
||||
employee: []
|
||||
},
|
||||
|
||||
// Publicité - Admin tout, autres view seulement
|
||||
publicity: {
|
||||
admin: ['view', 'create', 'edit', 'delete'],
|
||||
directeur: ['view'],
|
||||
manager: ['view'],
|
||||
employee: ['view']
|
||||
},
|
||||
|
||||
// Commandes client - Admin/Directeur tout, Manager tout sauf delete, Employé view + create
|
||||
'customer-orders': {
|
||||
admin: ['view', 'create', 'edit', 'delete'],
|
||||
directeur: ['view', 'create', 'edit', 'delete'],
|
||||
manager: ['view', 'create', 'edit'],
|
||||
employee: ['view', 'create']
|
||||
},
|
||||
|
||||
// DLC - Admin/Directeur tout, Manager tout sauf delete, Employé create + view
|
||||
dlc: {
|
||||
admin: ['view', 'create', 'edit', 'delete'],
|
||||
directeur: ['view', 'create', 'edit', 'delete'],
|
||||
manager: ['view', 'create', 'edit'],
|
||||
employee: ['view', 'create']
|
||||
},
|
||||
|
||||
// Tâches - Admin/Directeur tout, Manager view + create + edit + validate, Employé view seulement
|
||||
tasks: {
|
||||
admin: ['view', 'create', 'edit', 'delete', 'validate'],
|
||||
directeur: ['view', 'create', 'edit', 'delete', 'validate'],
|
||||
manager: ['view', 'create', 'edit', 'validate'],
|
||||
employee: ['view']
|
||||
},
|
||||
|
||||
// Avoirs - Admin/Directeur tout, Manager create + view seulement, Employé pas d'accès
|
||||
avoir: {
|
||||
admin: ['view', 'create', 'edit', 'delete', 'validate'],
|
||||
directeur: ['view', 'create', 'edit', 'delete', 'validate'],
|
||||
manager: ['view', 'create'],
|
||||
employee: []
|
||||
}
|
||||
};
|
||||
// Matrice rôle × module dans permissions.json, lue aussi par le serveur Rust
|
||||
// (server-rs/src/access.rs). Résumé :
|
||||
// - dashboard : tous les rôles voient
|
||||
// - calendar : admin/directeur tout, manager tout sauf supprimer, employé voit
|
||||
// - orders : admin/directeur tout, manager tout sauf supprimer, employé aucun accès
|
||||
// - deliveries : admin/directeur tout + valider, manager tout sauf supprimer + valider, employé aucun accès
|
||||
// - reconciliation : admin tout, directeur tout sauf supprimer, manager/employé rien
|
||||
// - publicity : admin tout, autres voient
|
||||
// - customer-orders : admin/directeur tout, manager tout sauf supprimer, employé voit + crée
|
||||
// - dlc : admin/directeur tout, manager tout sauf supprimer, employé voit + crée
|
||||
// - tasks : admin/directeur tout, manager voit + crée + modifie + valide, employé voit
|
||||
// - avoir : admin/directeur tout, manager crée + voit, employé aucun accès
|
||||
const PERMISSIONS = PERMISSIONS_DATA as Record<Module, Record<Role, Permission[]>>;
|
||||
|
||||
// Hook pour vérifier les permissions
|
||||
export function usePermissions(userRole?: string) {
|
||||
|
||||
Reference in new issue
Block a user