Commit 265ca4e3 authored by Alexis POYEN's avatar Alexis POYEN
Browse files

Started with SDK documentation

parent 388b4a44
...@@ -62,10 +62,10 @@ La démo est accessible avec l'url https://sdk-go.127.0.0.1.nip.io ...@@ -62,10 +62,10 @@ La démo est accessible avec l'url https://sdk-go.127.0.0.1.nip.io
- `./data` contient les bases de données locales sqlite, users.db pour les utilisateurs et test.db pour le modèle de donnée - `./data` contient les bases de données locales sqlite, users.db pour les utilisateurs et test.db pour le modèle de donnée
- `./dev-certificates` contient les fichiers nécessaires pour servir l'application en HTTPS durant le développement. - `./dev-certificates` contient les fichiers nécessaires pour servir l'application en HTTPS durant le développement.
- `./internal` contient les paquets nécessaires au développement de l'application - `./internal` contient les paquets nécessaires au développement de l'application
- `./auth` contient la gestion des utilisateurs et des droits sur l'application - `./auth` contient la gestion des utilisateurs et des droits sur l'application
- `./mocks` permet de mocker l'API d'authentification pour passer les tests - `./mocks` permet de mocker l'API d'authentification pour passer les tests
- `./models` permet de définri le modèle de données et les API qui seront servies par le back-end - `./models` permet de définri le modèle de données et les API qui seront servies par le back-end
- `./rootmux` contient le fichier `rootmux.go` qui permet de servir les APIs, de gérer l'authentification, de servir le site web et la gestion des cookies utilisateurs. Le répertoire contient également tous les tests d'intégration sur les APIs. - `./rootmux` contient le fichier `rootmux.go` qui permet de servir les APIs, de gérer l'authentification, de servir le site web et la gestion des cookies utilisateurs. Le répertoire contient également tous les tests d'intégration sur les APIs.
- `./miscellaneous/keycloack` contient un environnement Keycloack qui peut être utilisé pour déployer un environnement OAuth2 - `./miscellaneous/keycloack` contient un environnement Keycloack qui peut être utilisé pour déployer un environnement OAuth2
- `./pkg` contient les diffférents package génériques qui permettent de gérer les logs applicatifs, de créer les fonctiones de tests, la gestion des tokens... - `./pkg` contient les diffférents package génériques qui permettent de gérer les logs applicatifs, de créer les fonctiones de tests, la gestion des tokens...
- `./web` est le répertoire où est stockée l'application front-end et publié par le serveur back-end. - `./web` est le répertoire où est stockée l'application front-end et publié par le serveur back-end.
...@@ -150,12 +150,60 @@ Dans le fichier `web/assets/brand/manifest.js`, remplacer : ...@@ -150,12 +150,60 @@ Dans le fichier `web/assets/brand/manifest.js`, remplacer :
C'est dans le fichier `models.go` que doit être définit le modèle de donnée de l'application. C'est dans le fichier `models.go` que doit être définit le modèle de donnée de l'application.
> Ce qui suit sont des recommandations :
Créer un fichier par objet du modèle en suivant la structure des fichiers `bankers.go` ou `client.go`
Dans le répertoire `./rootmux` écrire les tests métiers (ex : mettre à jour le montant sur le compte bancaire d'un client lorsqu'il effectue une opération) dans le fichier `rootmux_test.go`.
Les tests concernant les droits et les réponses attendues par utilisateur (ex : un banquier n'a accès qu'aux client qui lui sont rattachés et pas aux autres) peuvent être écrit dans des fichiers différent par type de droits différent (ex : `banker_test.go` pour tester les droits des banquiers)
### Création de rôles
> ATTENTION : le rôle "ADMIN" est obligatoire dans l'application car permet de gérer les utilisateurs et leurs droits. Sans celui-ci est sans utilisateurs ayant ce rôle dans la base, il est impossible de créer de nouveaux utilisateurs !
En mode InMemory (utilisateurs dans la bases locales) L'API de gestion des utilisateurs suit ce format :
```json
{ "login": "UserTest", "password": "password", "role": "CLIENT" }
```
Il suffit donc de remplacer "CLIENT" par n'importe quelle valeur pour créer un nouveau rôle
> Si vous utilisez l'interface web du SDK pour la gestion des utilisateurs, pour définir les rôles possibles il faut modifier les options dans le menu `select` du fichier `./web/components/users/handleUser.js`
>
> ```html
> <select name="role" id="users-modal-role">
> <option value="CLIENT">Client</option>
> <option value="BANKER">Banquier</option>
> <option value="ADMIN">Administrateur</option>
> </select>
> ```
**Rôles à partir d'OAuth2**
Pour définir des rôles automatiquement à partir d'une connexion OAuth2 et un groupe applicatif donné il faut dans la fonction `addUserInMemory` du fichier `./internal/auth/oauth2.go` rajouter la condition qui permet d'identifier le groupe applicatif de l'utilisateur et de lui donner le rôle qui correspond
```go
if userRole != "" && (userRole == os.Getenv("ADMIN_GROUP")) {
user.Role = "ADMIN"
user.IsAdmin = true
break
} else if userRole != "" && (userRole == os.Getenv("CLIENT_GROUP")) {
user.Role = "CLIENT"
user.IsAdmin = false
break
} else {
return user, errors.New("user not in an app group")
}
```
Un utilisateur qui n'est pas dans un groupe applicatif autorisé ne pourra pas accèder à l'applicaion
## Contribution ## Contribution
Un bug découvert ? Une demande d'amélioration ? Une contribution à la dcoumentation ? Un bug découvert ? Une demande d'amélioration ? Une contribution à la dcoumentation ?
Utilisé le système d'issue pour expliquer votre découverte ou votre poposition. Utilisé le système d'issue pour expliquer votre découverte ou votre poposition.
Vous voulez contribuez directement au code ? Vous voulez contribuez directement au code ?
Créer une issue pour expliquer votre contribution, créer une branche à partir de cette issue, développer votre fonctionnalité sur la branche et faite une merge request. Créer une issue pour expliquer votre contribution, créer une branche à partir de cette issue, développer votre fonctionnalité sur la branche et faite une merge request.
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment