Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

20231020 update specs 2.1 #50

Merged
merged 5 commits into from
Oct 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 25 additions & 91 deletions docs/Application.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ L'application est l'objet central du microservice Applications du service.
- données de **création** [obligatoire] - auteur et date de création
- données de **modification** [facultatif] - auteur et date de modification

#### Unicité
##### Unicité
Dans notre contexte, l'unicité d'une application est contrôlée. Une application est dite unique dés lors qu'elle n'est référencée qu'une seule fois pour un même organisme.

Les scénari suivants indiquent les éléments qui peuvent être inscrits dans le référentiel et celui qui est rejeté :
Expand All @@ -94,6 +94,19 @@ A l'issue du contrôle, le service renvoie au système à l'initiative de la dem
- une indication d'enregistrement (etat: OK);
- une indication de rejet/conflit (etat: KO).

#### Requirements (lang:EN)

| ReqID | Context | Requirement Description | Comments |
|---------|----------|-------------------------|----------|
| APP-001 | POST | The applicationId is generated while application recording in DB. | |
| APP-002 | GET | Answer contains all direct attributes of application object. Children applications [enfantsApplication] is an array of applications with only the direct attributes. Parent application [parentApplication] is an application object with only its direct attributes. CodeApplication [codeApplication] is an array of external codes applicable to the current application object. Roles [acteurRoles] is an array of roles, where the organisation is always filled. If the actor is filled, the organisation is the actor's one. Incoming and Output flows [fluxEntrant and fluxSortant] is an array of flow objects with the flows direct attributes and either the application object with its direct attributes or the organisation with its direct attributes. Instances [instances] is an array of instance objects with their direct attributes and the environnement object with its direct attributes. Capabilities [capacites] is an array of capabilities directly associated with the current application, described with their direct attributes, the name (and id) of parent capability is existing. Urban Zones [zonesUrbanisme] is an array of urban zone objects directly associated with the current application, described with their direct attributes, the name (and id) of parent zone is existing. Compliance [conformite] is an array of compliance objects with their direct attributes. | This requirement is complex, and covers all the object required independantly of the planification. So it has to be considered in this way |
| APP-003 | POST/PUT | we must ensure that the applicationName is unique for an organisation; the couple (applicationName+organisationId) is unique | |
| APP-004 | POST | By default, the application status is set as "En construction" (code BLD) | |
| APP-005 | POST/PUT | if an actor is associated with an application (via role), but unknown into the DB, it will be created. The existence test is based on the email address. | |
| APP-006 | POST/PUT | if an organisation is associated with the application (as owner organisation, via a role, or as couterpart of flow) but unknown into the DB, it will be created. Its existence test is based on the couple (name+parentId) | |
| APP-007 | POST/PUT | if a capability is associated with the application, but not existing into the DB, it will be created. The existence test is based on the capability name. | WARNING: we could link an application to the wrong capability, because capabilities could have the same name with different parents. |
| APP-008 | POST/PUT | a compliance record is created if the complianceType is not existing for this application, either, it is updated - unicity of applicationId+complianceType | |

### Objet ApplicationId

Cet objet a pour but de d'associer des identifiants d'application issus de référentiels externes aux objets applications.
Expand Down Expand Up @@ -159,6 +172,17 @@ Un acteur est nécessairement un individu.

Un traitement "batch" doit être prévu pour sélectionner tous les acteurs avec une date d'échéance + un délai d'un an (paramétrable), et anonymiser les noms et email.

#### Requirements (lang:EN)

| ReqID | Context | Requirement Description | Comments |
|---------|----------|-------------------------|----------|
| ACT-001 | POST | The actorId is generated while application recording in DB. | |
| ACT-002 | POST | Fields name and email are required. | |
| ACT-003 | POST/PUT | ValidationDate is calculated as the latest role validationDate associated at the current Actor, or the last creation/update date added with 730 days; the "730" value must be parameterizable (via config file at least) | |
| ACT-004 | POST/PUT | An actor can be associated (optional) with external ids. Every id must be unique for a type (actorId+actorCodeType is unique) | |
| ACT-005 | POST/PUT | The email is unique into the database | |
| ACT-006 | POST/PUT | In case of creation request for an actor, in case of exisyting email into the DB, the found record is updated (no creation). The creation occurs only if there is no actor with the pushed email. | |

### Objet ActeurId

Cet objet a bour but d'associer des identifiants issus de référentiels externes à des acteurs. La liste des types d'identifiants est définie via l'objet TypeIdActeur.
Expand All @@ -182,93 +206,3 @@ Les attributs de cet objet sont:
- **description** [facultatif] description du type d'identifiant, inclut la référence au SI maître
- lien vers **SI de référence** [facultatif] lien vers le SI gérant les identifiants de ce type


## Cas d'usage

### Sequence de création d'une application

La représentation des diagrammes de séquence précise les échanges sous forme d'API entre le console cloud pi native et CANEL.

Pour créer une nouvelle application, il est nécessaire de :
- de vérifier la présence d'un utilisateur "souscripteur"
- de créer l'utilisateur "souscripteur" s'il n'existe pas
- de vérifier la présence d'une application
- de créer l'application si elle n'existe pas
- d'associer l'application au souscripteur existant ou au nouveau scripteur.

#### Creation avec un acteur existant et une application inconnue

```mermaid
sequenceDiagram
Console->>+CANEL: GET /api/v1/organisations
Note right of CANEL: La ressource n'est pas encore disponible
CANEL-->>-Console: code retour http [200], liste[]
Console->>+CANEL: GET /api/v1/acteurs?email_acteur=souscripteur.example@email.gouv
CANEL-->>-Console: code retour http [200]
Console->>+CANEL: GET /api/v1/applications?nom_application=CANEL&ministere_responsable=ministere%20de%20l'interieur
CANEL-->>-Console: code retour http [404]
Console->>+CANEL: POST /api/v1/applications {id(acteurs) ,applications, description, ministere_responsable ...}
CANEL-->>-Console: code retour http [201]
```

#### Creation avec un acteur inconnu et une application inconnue

```mermaid
sequenceDiagram
Console->>+CANEL: GET /api/v1/organisations
Note right of CANEL: La ressource n'est pas encore disponible
CANEL-->>-Console: code retour http [200], liste[]
Console->>+CANEL: GET /api/v1/acteurs?email_acteur=souscripteur.example@email.gouv.fr
CANEL-->>-Console: code retour http [404]
Console->>+CANEL: POST /api/v1/acteurs {nom_acteur,email_acteur...}
CANEL-->>-Console: code retour http [201], id
Console->>+CANEL: GET /api/v1/applications?nom_application=CANEL&ministere_responsable=ministere%20de%20l'interieur
CANEL-->>-Console: code retour http [404]
Console->>+CANEL: POST /api/v1/applications {id(acteurs) ,applications, description, ministere_responsable ...}
CANEL-->>-Console: code retour http [201]
```


### Sequence de modification d'une application

La représentation des diagrammes de séquence précise les échanges sous forme d'API entre le console cloud pi native et CANEL.

Pour mettre à jour une nouvelle application existante, il est nécessaire de :
- de vérifier la présence d'un utilisateur "souscripteur"
- de créer l'utilisateur "souscripteur" s'il n'existe pas
- de vérifier la présence d'une application
- d'associer l'application au souscripteur existant ou au nouveau scripteur.

#### Mise à jour avec un acteur inconnu et une application existante

```mermaid
sequenceDiagram
Console->>+CANEL: GET /api/v1/organisations
CANEL-->>-Console: code retour http [200], liste[]
Console->>+CANEL: GET /api/v1/acteurs?email_acteur=souscripteur.example@email.gouv.fr
CANEL-->>-Console: code retour http [404]
Console->>+CANEL: POST /api/v1/acteurs {nom_acteur,email_acteur...}
CANEL-->>-Console: code retour http [201], id
Console->>+CANEL: GET /api/v1/applications?nom_application=CANEL&ministere_responsable=ministere%20de%20l'interieur
CANEL-->>-Console: code retour http [200], id
Console->>+CANEL: PUT /api/v1/applications {id(applications), id(acteurs), nom_application, description, ministere_responsable ...}
CANEL-->>-Console: code retour http [200]
```

`
Note : ajustement à faire pour le body du endpoint applications concernant l'association application/acteurs
`

#### Mise à jour avec un acteur existant et une application existante

```mermaid
sequenceDiagram
Console->>+CANEL: GET /api/v1/organisations
CANEL-->>-Console: code retour http [200], liste[]
Console->>+CANEL: GET /api/v1/acteurs?email_acteur=souscripteur.example@email.gouv.fr
CANEL-->>-Console: code retour http [200], id
Console->>+CANEL: GET /api/v1/applications?nom_application=CANEL&ministere_responsable=ministere%20de%20l'interieur
CANEL-->>-Console: code retour http [200], id
Console->>+CANEL: PUT /api/v1/applications {id(applications), id(acteurs), nom_application, description, ministere_responsable ...}
CANEL-->>-Console: code retour http [200]
```
122 changes: 78 additions & 44 deletions docs/GestionDroits.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,29 @@
# Gestion des droits des utilisateurs

**_Version_** : en cours

**_Discussions_** ouvertes

**_Thèmes manquants ou à renforcer:_**
- Description chainage Authentification-CLIENT-API
**_Version CANEL_** : 2.1

## Hypothèses de départ

Un utilisateur est identifié dans la table "Acteur"
La description de ces droits décrits dans ce document est limitée aux objets suivants:
- Acteur
- Rôle
- Application
- Conformité
- Environnement
- Instance
- Données de référence
Les accès à CANEL sont contrôlés selon trois types de profils:
- Application: certaines applications (exemple: DSO) disposent d'un profile de droits indépendant de l'utilisateur opérant cette application.
- Utilisateurs statutaires: utilisateurs identifiés, disposant de rôles applicatifs transverses aux objets gérés dans CANEL (exemple: Architecte d'Entreprise)
- Utilisateurs acteurs: utilisateurs identifiés, disposant de rôles applicatifs dépendant des objets gérés dans CANEL (ex: Souscripteur, Chef de projet, ...)
- Semi Public: utilisateur identifié, ne disposant ni de rôles statutaires, ni de rôles acteurs.

Les droits sont de type CRUD (Create - Read - Update - Delete)
## Authentification d'une application

## Authentification d'un utilisateur

- Un utilisateur doit s'authentifier via Passage2.
- L'authentification via Passage2 doit donc pouvoir être associée à un acteur.
**Work in progress**
- Les accès via la Console DSO du Cloud PI Native sont supposés de confiance.
- Les appels d'API à partir de la Console DSO permettent de créer éventuellement un acteur correspondant à l'utilisateur connecté à la console, une application correspondant à l'usage de la console, et d'un rôle de "responsable d'application" reliant cet acteur et cette application.
- Les appels d'API à partir de la Console DSO permettent de créer éventuellement un acteur correspondant à l'utilisateur connecté à la console, une application correspondant à l'usage de la console, et d'un rôle de "souscripteur" reliant cet acteur et cette application.

## Authentification/identification d'un utilisateur

**TODO**: mécanisme d'authentification PASSAGE2-CLIENT-API à décrire.
- Un utilisateur doit s'authentifier via Passage2.

### Diagramme de séquence générique issu du modèle de DAG

**TODO**: Diagramme ci-dessous issu du modèle de DAG - doit être enrichi avec l'inclusion d'une API GW.

```mermaid
sequenceDiagram
Navigateur->>+Application: 1.(HTTPS) requête d'accès
Expand All @@ -46,30 +38,72 @@ PASSAGE2-->>-Application: 9. (HTTPS) PASSAGE2 répond en envoyant les infos de l
Application-->>Navigateur: 10.(HTTPS) l'application ouvre l'accès à l'utilisateur en fonction de ses droits
```

## Définition des rôles
## Application des droits

Les rôles disposant de droits sur les objets sont définis dans le classeur Excel [CANEL2 _ Cartographie des utilisateurs du service v0.xlsx](https://resana.numerique.gouv.fr/public/perimetre/consulter/91576?information=7329509)
Ces rôles sont:
- Responsable d'application
- Gestionnaire de portefeuille
- Architecte d'entreprise
- RSSI
- Administrateur fonctionnel

Il est possible de décrire d'autres rôles dans CANEL pour mieux décrire une application, mais hors des rôles listés ci-dessus, les autres rôles n'offrent pas de droits sur les données de CANEL.
La description de ces droits décrits dans ce document est limitée aux objets suivants:
- Acteur
- Rôle
- Application
- Conformité
- Environnement
- Instance
- Données de référence

Les droits sont de type CRUD (Create - Read - Update - Delete).
Si un utilisateur dispose de plusieurs rôles sur un objet, les droits appliqués sont les plus ouverts.

Les droits sont contrôlés au niveau des micro-services CANEL.

## Attributions des rôles

_Remarque du 23/05/2023: l'objet "Portefeuille" n'est pas décrit; le rôle de Gestionnaire de Portefeuille ne peut donc lui être associé, or les droits sur les applications sont effectués par transitivité au travers de cet objet. Le tableau ci-dessous représente donc une anticipation._
### Applications (ex: DSO)

| | Acteur | Rôle | Application | Conformité | Environnement | Instance | Données de référence |
|---------|--------|------------------------------------|------------------------------------|------------|---------------|------------------------------------|----------------------|
| **DSO** | CRU | CRU (sur les applications servies) | CRU (sur les applications servies) | R | R | CRU (sur les applications servies) | CRUD |

### Utilisateurs statutaires

Les profils statutaires sont fournis par le gestionnaire d'identités (PASSAGE2)
Les profils statutaires prévus sont:
- Administrateur
- Direction (incluant la MPSSI)

| | Acteur | Rôle | Application | Conformité | Environnement | Instance | Données de référence |
|--------------------|--------|--------|-------------|------------|---------------|----------|----------------------|
| **Administrateur** | CRU | CRU | CRU | CRU | CRU | CRU | CRUD |
| **Direction** | R | R | R | R | R | R | CRU |

### Utilisateurs acteurs

Un utilisateur est identifié dans la table "ACT_Actor"; ses droits sont définis par les rôles qu'il porte dans la table "PRJ_ApplicationRole" sur les objets applications.
Les rôles relatifs aux applications sont:
- Chef de Projet/Product Owner [CDP]
- MOA/Business Owner [MOA]
- Architecte Solution [ASOL]
- Architecte Infra [AINF]
- MOE [MOE]
- Resp Production [RPP]
- Support [SUPT]
- RSSI [RSSI]
- Souscripteur [SOUSC]

Un utilisateur identifié peut disposer de droits issus de ce segment, mais être complété par des droits statutaires. Par défaut, il dispose des droits semi-publics.
Remarque: l'accès semi-public permet une lecture sur les applications hors SIIV ou SIE. Les accès en lecture permettent donc un accès en lecture sur les applications SIIV ou SIE auxquelles l'acteur est associé.

| | Acteur | Rôle | Application | Conformité | Environnement | Instance | Données de référence |
|----------------------------------|--------|----------------------------|----------------------------|----------------------------|---------------|----------------------------|----------------------|
| **Chef de Projet/Product Owner** | CRU | CRU (sur ses applications) | CRU (sur ses applications) | CRU (sur ses applications) | R | CRU (sur ses applications) | R |
| **MOA/Business Owner** | CRU | CRU (sur ses applications) | R (sur ses applications) | CRU (sur ses applications) | R | R (sur ses applications) | R |
| **Architecte Solution** | R | R (sur ses applications) | CRU (sur ses applications) | CRU (sur ses applications) | R | CRU (sur ses applications) | R |
| **Architecte Infra** | R | R (sur ses applications) | R (sur ses applications) | R (sur ses applications) | R | CRU (sur ses applications) | R |
| **MOE** | R | R (sur ses applications) | CRU (sur ses applications) | CRU (sur ses applications) | R | CRU (sur ses applications) | R |
| **Resp Production** | R | R (sur ses applications) | R (sur ses applications) | R (sur ses applications) | R | CRU (sur ses applications) | R |
| **Support** | R | R (sur ses applications) | R (sur ses applications) | R (sur ses applications) | R | R (sur ses applications) | R |
| **RSSI** | R | R (sur ses applications) | R (sur ses applications) | CRU (sur ses applications) | R | R (sur ses applications) | R |
| **Souscripteur** | CRU | CRU (sur ses applications) | CRU (sur ses applications) | R (sur ses applications) | R | CRU (sur ses applications) | R |

### Accès semi-public

Cet accès est donné à un acteur identifié via PASSAGE2 associé à aucun groupe de droits statutaires.

| | Acteur | Rôle | Application | Conformité | Environnement | Instance | Données de référence |
|-----------------|--------|------|---------------------|---------------------|---------------|----------|----------------------|
| **Semi-Public** | - | - | R (Hors SIE et SIIV) | R (Hors SIE et SIIV) | - | - | R |

| | Acteur | Rôle | Application | Conformité | Environnement | Instance | Données de référence |
|------------------------------|--------|--------|-------------|------------|---------------|----------|----------------------|
| **Responsable d'application** | CRU sur ses applications | CRU sur ses applications | CRU sur ses applications | CRU sur ses applications | R | CRU sur ses applications | R |
| **Gestionnaire de portefeuille** | CRU sur ses applications | CRU sur ses applications | CRU sur ses applications | CRU sur ses applications | R | CRU sur ses applications | R |
| **Architecte d'Entreprise** | CRU | CRU | CRU | CRU | CRU | CRU | R |
| **RSSI** | R | R | R | CRU | R | R | R + CRU sur Conformité |
| **Administrateur fonctionnel** | CRUD | R | R | R | R | R | CRUD |