feat: v8 - skill itinova-user-management (3 profils admin/standard/readonly, logo FEHAP, login/email)

This commit is contained in:
Manus Deploy
2026-04-21 06:51:07 -04:00
parent 65e345459c
commit a8b1784e28
14 changed files with 1356 additions and 219 deletions

View File

@@ -14,10 +14,18 @@ export const users = mysqlTable("users", {
id: int("id").autoincrement().primaryKey(),
// openId peut être null pour les comptes créés manuellement (connexion locale uniquement)
openId: varchar("openId", { length: 64 }).unique(),
name: text("name"),
// Login = email ou identifiant court (ex: adminItinova)
login: varchar("login", { length: 255 }).unique(),
email: varchar("email", { length: 320 }),
firstName: varchar("firstName", { length: 100 }),
lastName: varchar("lastName", { length: 100 }),
name: text("name"),
loginMethod: varchar("loginMethod", { length: 64 }),
role: mysqlEnum("role", ["user", "admin"]).default("user").notNull(),
// Rôle technique (skill itinova-user-management) :
// admin = administrateur (tous droits + gestion utilisateurs + paramétrage)
// standard = utilisateur standard (droits métiers, pas de config)
// readonly = lecture seule
role: mysqlEnum("role", ["admin", "standard", "readonly"]).default("standard").notNull(),
// Profil SONUM :
// referent = référent numérique (saisit les logiciels de ses établissements)
// gestionnaire = gestionnaire SONUM (accès admin complet)
@@ -25,6 +33,7 @@ export const users = mysqlTable("users", {
sonumRole: mysqlEnum("sonumRole", ["referent", "gestionnaire", "adherent"])
.default("referent")
.notNull(),
isActive: boolean("isActive").default(true).notNull(),
// CGU acceptée
cguAccepted: boolean("cguAccepted").default(false).notNull(),
cguAcceptedAt: timestamp("cguAcceptedAt"),