Authentification et admission
Ce que voit le canal
WARN (websocket): message 'message_demande' refusé pour la session 8fa1ee2f-… (allowMessage) — jeté
Le pattern complet
handleMessage(message) {
if (message.login) {
const user = this.#authenticate(message.login);
if (user !== null) message.session.data.user = user; // visible de tous, dès maintenant
this.broker.publish(this, { login_result: { granted: user !== null }, id: message.id });
}
if (message.connection_event?.channel === this.canal) { // un composant d'auth PAR canal
const { event } = message.connection_event;
const session = message.session;
if (event === "connected") session.allowMessage = (name, payload) => {
const user = session.data.user;
if (!user) return name === "login";
if (name === "gerer_clients" && payload.delete) return user.role === "admin"; // grain oneOf
return true;
};
if (event === "resumed") { /* re-valider : banni entre-temps ? */ }
if (event === "expired") { /* libérer */ }
}
}
allowMessage ne décide que de l'admission. L'autorisation fine d'une action reste au composant qui l'exécute, par une convention libre (par exemple session.allowAction(...)), hors framework.