You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: web/docs/01-notes/22-rencontre11.2.md
+155-1Lines changed: 155 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -191,4 +191,158 @@ public async Task<IActionResult> PostRole(string roleName){
191
191
elsereturnBadRequest(new { Message="La création du rôle a échoué." });
192
192
193
193
}
194
-
```
194
+
```
195
+
196
+
## 👤 Identité côté client
197
+
198
+
Parfois, côté client, on souhaite :
199
+
200
+
* Cacher certains boutons ou menus qui sont seulement disponibles pour certains **rôles**.
201
+
* Cacher certains boutons ou menus qui sont seulement disponibles pour les utilisateurs **authentifiés**.
202
+
* Afficher le **nom d'utilisateur** de ... l'utilisateur, s'il est connecté.
203
+
* etc.
204
+
205
+
Problème : La **gestion des utilisateurs** existe seulement **côté serveur**. Il n'y a pas de notions de `User` ou de `Role`**côté client**.
206
+
207
+
Il est tout de même possible de *bricoler* des solutions pour réaliser les défis mentionnés ci-dessus, mais il faut garder à l'esprit que cela ne permettra jamais de **sécuriser** l'application, seulement de **raffiner** l'apparence. Pour rappel, les utilisateurs ont **accès à tout le code** des composants qui sont `"use client";` !
208
+
209
+
⛔ Gardons tout de même à l'esprit que les utilisateurs n'aiment pas voir des menus ou boutons qui ne leur sont pas destinés.
210
+
211
+
### 🔑 Données de connexion
212
+
213
+
Pour rappel, lorsqu'on se **connecte**, on envoyait le token à l'application cliente :
Côté client, on peut récupérer ces informations et les utiliser pour cacher des menus et boutons ou personnaliser l'apparence de l'interface selon l'identité.
236
+
237
+
```tsx showLineNumbers
238
+
asyncfunction login(loginDTO:any){
239
+
240
+
const x =awaitaxios.post(domain+"api/Users/Login", loginDTO);
// 🤷♂️ On peut aussi retourner les données pour qu'une autre fonction les utilise
253
+
returnx.data;
254
+
255
+
}
256
+
```
257
+
258
+
:::tip
259
+
260
+
✅ Stocker les données de l'utilisateur dans des **états** sera très intéressant pour gérer des **affichages conditionnels** dans le HTML. Cela dit, les données seront perdues si on réactualise la page.
261
+
262
+
💾 Stocker les données de l'utilisateur dans le **stockage du navigateur** n'est pas très pratique pour gérer les affichages conditionnels, mais c'est parfait pour s'assurer que les données puissent être récupérées avec `useEffect()` et les faire perdurer malgré un *reload*.
263
+
264
+
Combinez les **deux** stratégies autant que possible. Les **Contexts** pourraient même servir afin de **partager** ces données entre **plusieurs commposants** dans certains cas.
265
+
266
+
:::
267
+
268
+
### 📦 DTOs différenciés selon l'identité
269
+
270
+
Une autre stratégie possible est d'exploiter les *DisplayDTOs*. Par exemple, voici, les classes `Comment.cs` et `CommentDisplayDTO.cs`. Bien entendu, ce sont des `CommentDisplayDTO` qui seront envoyés au **client** car ils sont **plus adaptés** au projet **Next.js**.
0 commit comments