Gestion des accès

La gestion des accès dans authentic a deux objectifs:

L'idée est de partir du modèle RBAC et d'en garder l'essentiel pour couvrir ces deux besoins.

class Role
class User
class Objet

User - Role : < membre
Role -down-> Droit : a
Role -right-> Role : hérite
Droit -> Action : comment
Droit -down-> Objet : quoi
`Modèle RBAC avec héritage`

Nous n'avons pas besoin de la partie sur les permissions qui rend le modèle complexe à gérer; on confondra toujours un rôle avec une permission sur un objet, i.e. pour chaque paire permission, objet dont nous aurions besoin, il y aura un rôle équivalent qui pourra se combiner avec d'autres rôle en utilisant l'héritage permettant ainsi exactement les mêmes possibilités que le modèle RBAC complet.

class Role
class User


User - Role : < membre
Role -right-> Role : hérite de
`Modèle RBAC simplifié pour Authentic`

Notion d'héritage

L'héritage entre rôle n'a rien à voir avec l'héritage en programmation. Si un rôle R1 hérite d'un rôle R2, cela veut dire que le rôle R1 possède en plus des siennes toutes les permissions associées au rôle R2, soit directement soit via héritage. C'est une relation transitive, si R2 hérite de R3 alors R1 hérite indirectement aussi de R3.

Cela revient aussi à dire que tous les membres de R1 sont aussi indirectement des membres de R2.

Les rôles

Les rôles seront séparés en deux:

class Role
RoleTechnique -up-> AnyClass : "administre/donne accès"
Role -down-> User : membre
RoleTechnique -down-> User : membre

RoleTechnique -right-> RoleTechnique : hérite de
Role -up-> RoleTechnique : hérite de
Role -down-> Role : hérite de
`Modèle RBAC simplifié pour Authentic`

Rôles techniques d'administration

Pour permettre un découpage à gros grain de l'administration on ajoute le concept d'organisation, chaque objet (y compris les utilisateurs et les rôles) appartiennent à une organisation. Un rôle technique d'administration général est associé à chaque organisation, c'est l'équivalent du rôle super-utilisateur classique mais contraint à une organisation donnée. Les organisations sont structurées en arbre, une organisation peut contenir d'autres organisations et ses administrateurs ont tout pouvoir sur ces sous-unités administratives.

Pour chaque type d'objet on ajoute dans chaque organisation des rôles techniques d'administration de ces objets, le rôle technique d'administration général en hérite.

object "Rôle d'administration général de Orga" as AdminOrga
object Orga
object User1
object User2
object "Rôle d'administration des utilisateurs de Orga" as AdminUser

User1 -up-> Orga : appartient
User2 -up-> Orga : appartient
AdminOrga -> Orga : gère
AdminOrga -down-> AdminUser : hérite de
AdminUser -right-> User1 : gère
AdminUser -right-> User2 : gère
`Vue des rôles techniques d'administration avec une unique unité administrative`

object "Rôle d'administration générale de Orga" as AdminOrga
object "Rôle d'administration générale de Orga1" as AdminOrga1
object "Rôle d'administration générale de Orga2" as AdminOrga2
object Orga
object Orga1
object Orga2


Orga1 -up-> Orga : appartient
Orga2 -up-> Orga : appartient
AdminOrga -> Orga : gère
AdminOrga -down-> AdminOrga1 : hérite de
AdminOrga -down-> AdminOrga2 : hérite de
AdminOrga1 -right-> Orga1 : gère
AdminOrga2 -right-> Orga2 : gère
`Vue sur les rôles techniques d'administration avec plusieurs unités administratives hiérarchisées`

Rôle technique d'administration des rôles

Pour chaque rôle R (technique ou pas) un rôle technique d'administration Ra est crée. Il désigne les utilisateurs ayant le droit d'ajouter ou d'enlever des membres à ce rôle ainsi que de faire hériter un autre rôle de ce même rôle. Cette dernière opération revenant à affecter tous les membres de l'autre rôle au rôle administré, il est logique de le rendre possible.

Les rôles d'administration des rôles sont particuliers en ce qu'ils contrôlent leur propre administration, i.e. l'administrateur d'un rôle pourra toujours déléguer son pouvoir à un autre, i.e. il est aussi administrateur du rôle d'administration. Ceci pour éviter une récursion infinie au niveau des rôles d'administration des rôles qui aurait eu besoin d'un rôle d'administration à leur tour. On dit que ces rôles sont 'auto-administrés'.

Pour rendre n'importe quel rôle 'auto-administré' il suffit de lui faire hériter de son rôle d'administration.

object "Rôle technique d'administration de rôle" as Ra
object "Rôle" as R

Ra -down-> R : administre
Ra -right-> Ra : administre

Rôles techniques de gestion des accès

TODO Pour chaque object ayant besoin d'un accès on crée un rôle technique par exemple pour un service SAML w.c.s. on créera un rôle accès w.c.s, il donne accès ce service, sans lui l'IdP ne répondra pas.

À supposer que l'IdP propose de modéliser les rôles applicatifs, ils seront reproduits du coté d'authentic par des objets spécifiques, pour chacun de ces objets authentic créera un rôle d'accès du même nom. Ce rôle héritera du rôle d'accès de base.

object "W.C.S." as SAML
object "Rôle applicatif 1" as Cat1
object "Rôle applicatif 2" as Cat2
object "Rôle applicatif 3" as Cat3
object "Rôle d'accès à W.C.S" as R
object "Rôle mirroir 1" as R1
object "Rôle mirroir 2" as R2
object "Rôle mirroir 3" as R3

SAML <-down- Cat1 : service
SAML <-down- Cat2 : service
SAML <-down- Cat3 : service

R -> SAML : gère l'accès à
R1 -> Cat1 : gère le droit d'avoir
R2 -> Cat2 : gère le droit d'avoir
R3 -> Cat3 : gère le droit d'avoir

R1 -up-> R : hérite de
R2 -up-> R : hérite de
R3 -up-> R : hérite de

Visibilité

Il peut se poser la question de savoir si un administrateur d'un rôle dans organisation fille doit pouvoir voir les utilisateurs ou les rôles de l'organisation parente ou d'une organisation sœur quand il administre son rôle. Pour l'instant nous écartons ce problème et le déclarons hors-scope. Dans toutes les situations où un utilisateur est amené à choisir un utilisateur, ajouter un membre à un rôle, ou un rôle sans nécessité d'une permission particulière1 tous les utilisateurs ou rôles seront visibles.

1 par exemple pour hériter d'un rôle il faut être administrateur de celui-ci, il ne sera donc pas possible de voir dans la liste les rôles qu'on administre pas

IHM

Le graphes des rôles est un graphe dirigé complexe qu'on essayera pas de représenter. On aura comme actuellement avec les groupes une vue alphabétique de la liste de tous les rôles, et pour chaque rôle la liste de ses membres (directs et indirects via l'héritage). On y ajoutera deux nouveaux onglets: la liste des rôles dont il hérite et la liste des rôles qui héritent de lui. Tout au plus les services pourront indiquer des relations hiérarchiques de représentation pour certains rôles techniques, ceux-ci ayant généralement des relations d'héritage simples entre eux. Ainsi il sera intéressant dans l'exemple plus haut de présenter le rôle d'accès w.c.s. comme racine d'un arbre dont les catégories en sont les branches.

Chaque organisation disposera d'une vue d'accueil présentant l'accès aux 2 objets gérés principaux les utilisateurs et les rôles. Il y sera aussi présents un bouton d'accès pour chaque sous-organisation. Les [xxx] sont des liens. [-] est un bouton de suppression, [/] un bouton de suppression grisé.

 Agglo

   [Agglo           ]    [Ville1          ]   [Ville2] | [Ville3] | [Ville 4]
   | → utilisateurs |    | → utilisateurs |   ... 
   | → (à réfléchir)|
   |                |

Benj m'a dit qu'on laissait tomber cet affichage des utilisateurs par organisation (ville), c'est pas gérable quand il y a beaucoup de ville (+ de 1000 au CDG59 actuellement et beaucoup aussi dans l'AO en cours). Du coup on ne verra que les utilisateurs pour lesquels on a les droits nécessaires. Affichage sous forme de liste paginée avec une colonne indiquant l'organisation à laquelle appartient l'utilisateur.
Idem pour les rôles.

`Accueil du manager d'authentic`

 [Agglo] > Ville1

   [Utilisateurs] | [Rôles] | [Services SAML]

 -----

   [Service enfance] [Service état civil]


`Accueil du manager d'authentic pour la sous-organisation ville1`
 [Agglo] > [Ville1] > Utilisateurs

  Recherche: ________________ [Créer un nouvel utilisateur]

    Nom | Prénom | Email
 1 [xxx | xxx    | xxx@xxx ]
 2 [yyy | yyy    | yyy@yyy ]

   [1] [2] .. [5] [6]

Dans le cadre de Publik, on s'est mis d'accord sur le fait que l'accueil du /manage d'Authentic était superflu : il ne contient rien qui ne soit déjà exposé sur le portail agent (hobo/combo). Benj est ok en dépit de ce qu'il écrivait ici #7088

`Administration des utilisateurs de ville 1`

 [Agglo] > [Ville1] > [Utilisateurs] > Utilisateur 1

  Informations | [ Rôles ]

  Nom:     xxxx_____       [Renvoyer un mot de passe]
  Prénom:  xxxx_____       
  Email:   xx@xx____       [Forcer le changement du |
                           |au prochain login       ]
   [1] [2] .. [5] [6]

`Administration des informations personnelles de l'utilisateur 1 de ville 1`

 [Agglo] > [Ville1] > [Utilisateurs] > Utilisateur 1

  [Informations] | Rôles

  |   | Nom
  --------------------------
  | 1 | Administrateur Ville 1 [-]
  | 2 | Administrateur de service enfance de ville 1 (rôle hérité) [/]
  | 3 | W.C.S (rôle hérité) [/]
  | 4 | W.C.S :: Service enfance [-]
  |

  Ajouter un rôle: __________________ [Ok]
  `Vous devez être administrateur d'un rôle pour pouvoir l'ajouter`

(possibilité de clic sur "rôle hérité" pour avoir des infos du comment)

`Administration des rôles de l'utilisateur 1 de ville 1`

 [Agglo] > [Ville1] > Rôles

  Recherche: ________________ [Créer un nouveau rôle]

 |   | Nom                                      | Technique
 ----------------------------------------------------
 | 1 | Administrateur de ville 1                |   Oui
 | 2 | +-- Gestion des utilisateurs             |   Oui
 | 3 | +-- Gestion des rôles                    |   Oui
 | 4 | +-- Gestion des services SAML            |   Oui
 | 5 | +-- Administration du service enfance    |   Oui <- à voir si on fait aussi apparaître les rôles d'administration du niveau n au niveau n+1
 | 6 | +-- Administration du service état civil |   Oui
 | A | +-- Administration "élu"                 |   Oui
 | 7 | Accès à W.C.S.                           |   Oui
 | 8 | +--- Service Enfance                     |   Oui
 | 9 | +--- Service état civil                  |   Oui
 | B | +--- Élu                                 |   Oui
 |10 | Élus                                     |   Non

(suggestion : mettre dans un onglet différent les rôles d'administration des rôles (5, 6, A))

(injonction : retirer la colonne technique)

`Administration des rôles de ville 1`

 [Agglo] > [Ville1] > [Rôles] > Élus

  Membres | [Rôles hérités] | [Rôles héritants]  

  |   | Nom | Prénom | Email    | Membre direct
  ----------------------------------------------
  | 1 | xxx | xxx    | xxx@xxx  | Oui  [-]
  | 2 | yyy | yyy    | yyy@yyy  | Non  [/]
  | 3 | zzz | zzz    | zzz@zzz  | Oui  [-]
  ....

  [1] [2] .. [3] [4]

  Ajouter un membre: ___________ [Ok]

(rôles hérités → rôles dont on est membre) (rôles héritants → rôles "membres de")

`Administration des membres du rôle Élus`

 [Agglo] > [Ville1] > [Rôles] > Élus

  [Membres ] | _Rôles hérités_ | [Rôles héritants]  

  |   | Nom du rôle
  --------------------------------------------
  | 1 | W.C.S :: Élu

  Ajouter un rôle hérité: ___________ [Ok]
  `Pour pouvoir ajouter un rôle hérité vous devez être administrateur de ce rôle`

`Administration des rôles hérités du rôle Élus`

 [Agglo] > [Ville1] > [Rôles] > Élus

  [Membres ] | [Rôles hérités] | _Rôles héritants_

  |   | Nom du rôle                          |
  --------------------------------------------
  | Aucun rôle héritant                      |

  Ajouter un rôle héritant: ___________ [Ok]

`Administration des rôles hérités du rôle Élus`