[ToPIA][Chorem] Proposition sur la sécurité
Proposition sur la sécurité =========================== Contexte -------- Actuellement, la sécurité dans ToPIA se fait par JAAS. Elle propose la gestion de permission sur les entités ToPIA, droit en lecture, écriture, création et chargement. La gestion des droits fonctionne correctement. Mais elle semble ne pas être adaptée à la problèmatique du projet Chorem. Le projet Chorem a besoin de plus de souplesse dans l'écriture des permissions. Inversion de permission ------------------------ En sécurité, il existe deux stratégies pour la création des permissions : - la première consiste à interdire l'accès à l'ensemble des données et d'autoriser au cas par cas - la deuxième consiste à autoriser l'accès à l'ensemble des données et d'interdire au cas par cas Le framework ToPIA ne permet que d'utiliser la première stratégie. Il semble aussi important de proposer la deuxième stratégie. Lien entre permissions ---------------------- Un lien entre permissions consite à spécifier qu'une permission est la copie d'une autre permission sur des entités différentes. L'utilité d'un tel mécanisme est la propagation des modifications des droits sur la permission. Exemple sur un arbre, tous les noeuds vont avoir les mêmes droits que le noeud racine. En cas de modification sur le noeuds racine, automatiquement l'ensemble des noeuds de arbre vont changer de droit. L'avantage est notable, il n'est plus nécessaire de prendre l'ensemble des permissions des noeuds pour leur notifier les changements. LinkPermission : - id (* ou TopiaId) - link (permission ou principal ?) - principals Permission de type association ------------------------------ On va partir d'un exemple : |--------| 1 * |-------| | Projet |----------------| Tâche | |--------| contient |-------| On souhaiterait spécifier qu'un utilisateur à aucune restriction sur l'ensemble des projets. Et il n'a la permission de créer des sous-tâches seulement dans le projet «essai». Utilisation d'EntityPermission ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ On peut spécifier que la première partie ALL - * Project, mais la deuxième partie ne pourra pas être défini. Utilisation de LinkPermission ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ On va avoir tendance à écrire : - EntityPermissionName = CREATE - essai Project - LinkPermissionName = * Task - EntityPermissionName Attention, ce n'est pas ce que l'on veut. On vient de dire que l'on a la permission de création sur toutes les tâches (CREATE * Task). AssociationPermission ~~~~~~~~~~~~~~~~~~~~~ L'exemple précédent à mis en évidence un manque. Les permissions de type association répondent à ce type de problème. Elles consitent à donner une permission par rapport à une autre entité par le biais d'une association. Dans le cas d'une action de modification, de suppression ou de chargement, les permissions de type association peuvent être remplacées par des permissions de type entité. En effet, les permissions de type association ne sont qu'une virtualisation d'un ensemble d'entité, pour lesquelles on associe des permissions. Attention, les permissions de type association sont caractérisées par leur sens de navigation. Le cas de la récursivité des associations n'est pas traité car cette caractéristique est compliquée à mettre en oeuvre. L'utilisation de lien entre permissions est recommandé de ce type cas. AssociationLink : - id (* ou TopiaId) - association (name) - actions (ALL, CREATE, UPDATE, DELETE et LOAD) - reverseId (* ou TopiaId) - principals En applicant, ce nouveau type de permission sur l'exemple précédent, on obtient : essai Project - contient - CREATE - * Task. C'est à dire qu'on a la permission de création si c'est le projet essai qui contient les nouvelles tâches. ----------------------------------------------------------- Julien Ruchaud
participants (1)
-
Julien Ruchaud