Author: bleny Date: 2010-08-03 12:25:07 +0200 (Tue, 03 Aug 2010) New Revision: 218 Url: http://nuiton.org/repositories/revision/wikitty/218 Log: r?\195?\169?\195?\169criture de la spec s?\195?\169curit?\195?\169 Modified: trunk/src/site/rst/Spec.rst Modified: trunk/src/site/rst/Spec.rst =================================================================== --- trunk/src/site/rst/Spec.rst 2010-08-03 09:48:17 UTC (rev 217) +++ trunk/src/site/rst/Spec.rst 2010-08-03 10:25:07 UTC (rev 218) @@ -1,24 +1,29 @@ Ce document est fait pour contenir toutes les normalisations autour de Wikitty -Identifiant -=========== +Identifiant des wikitties +========================= + Les identifiants sont de la forme UUID[_<specifique extension>]. Donc tous les -identifiants commence par un UUID et peu etre séparé d'une extension -specifique pour certain besoin par un '_' (underscore) +identifiants commence par un UUID et peut être séparé d'une extension +spécifique pour certain besoin par un '_' (underscore) -Droits -====== -Si l'on veut que tout le monde puisse lire un objet, il faut laisser vide la -liste des readers (vide ou null). Si l'on souhaitent indiquer que personne -ne peut lire l'objet il faut mettre le owner en tant que reader. Car de -toute façon l'owner aura toujours le droit en lecture -Les AppAdmin doivent etre dans le *WikittyGroup* portant le nom -**WikittyAppAdmin**. +Gestion des droits +================== + +Utilisateurs et groupes +----------------------- + +Les utilisateurs ont un nom et un mot de passe, les groupes contiennent +des utilisateurs (d'autres groupes ?) + +Par défaut il existe un *WikittyGroup* portant le nom **WikittyAppAdmin**. Si ce groupe n'existe pas ou qu'il est vide, cela indique que tous les utilisateurs sont AppAdmin. Cela est nécessaire pour deux choses: + - pour permettre d'avoir une authentification, mais que l'on ne souhaite pas de gestion d'autorisation. + - pour servire de bootstrap au lancement de l'application seul les AppAdmin peuvent modifier le *WikittyGroup* portant le nom **WikittyAppAdmin**, or s'il est vide il faut pouvoir le remplir. @@ -26,26 +31,88 @@ Il ne doit donc exister un seul *WikittyGroup* portant le nom **WikittyAppAdmin** +Tokens de sécurité +------------------ + +À chaque login, un token de sécurité est fourni à l'utilisateur. L'utilisateur +doit fournir ce token à chaque opération pour montrer qu'il a les droits. +Pour un token donné, on peut savoir à quel utilisateur il appartient. + +Les tokens sont stockés en base et supprimés au logout de l'utilateur. + Les SecurityToken ne sont supprimés de la base de données qu'au moment du logout Si les utilisateurs/applications quittent sans faire le logout le nombre de SecurityToken ne fera qu'augmenter. Pour éviter cela, il faut prévoir un petit job qui de temps en temps fait le ménage dans les SecurityToken trop vieux. -Gestion des droits d'extension -l'idée c'est de créer un wikitty qui a pour extension WikittySecurity, nommé -WikittySecurity'ExtensionName'. Les admins peuvent changer les droits, les writers -peuvent modifier l'extension et les readers peuvent lire l'extension pour en créer -des instances. -Si le wikitty n'est pas trouvé, seuls les AppAdmin peuvent créer les instances et -modifier l'extension. -Si le reader est vide, tout le monde peut créer. Pour que suls les AppAdmin et le -owner puissent créer des isntances, il faut mettre le owner en reader. +Gestion des droits sur un Wikitty +--------------------------------- +Un wikitty a plusieurs extensions, pour chacune de ces extensions, on a plusieurs +droits. On distinque quatre niveaux de droits : -Localisation wikitty --------------------- +* owner (un utilisateur) donne tous les droits sur un wikitty +* admin (zéro ou plusieurs utilisateurs / groupes) permet d'ajouter ou de + supprimer des éléments dans writer et reader + +* writer (zéro ou plusieurs utilisateurs / groupes) permet, pour chacun des + champs de cette extension, de modifier la valeur + +* reader (zéro ou plusieurs utilisateurs / groupes) permet, pour chacun des + champs de cette extension, de lire la valeur + +Si on veut que tout le monde puisse lire un wikitty, il faut laisser vide la +liste des readers (vide ou null). + +Si l'on souhaite indiquer que personne ne peut lire l'objet il faut mettre le +owner en tant que reader. Car de toute façon l'owner aura toujours le droit +en lecture. + +La granularité est donc au niveau des extensions. C'est à dire qu'avoir +le droit reader de l'extension Ext permet de lire tous les champs de l'extension +Ext de tous les wikitty qui ont l'extension Ext. + +Gestion des droits sur les extensions +------------------------------------- + +Pour chaque extension, on a la même hiérachie de droit qui donnent des +possibilités différentes : + +* owner : + +* admin : permet de changer les droits de l'extension. Donc, permet d'ajouter + ou de supprimer des éléments dans writer et reader + +* writer : permet de modifier l'extension l'extension + +* reader : permet de lire l'extension pour en créer des instances. Si le reader + est vide, tout le monde peut créer. Pour que seuls les AppAdmin et le owner + puissent créer des instances, il faut mettre le owner en reader. + +Si une extension ne dispose pas de ces informations, seuls les AppAdmin peuvent +créer les instances et modifier l'extension. + +Comment ces droits sont stockés +------------------------------- + +Pour chaque extension connue, il y aura donc un wikitty dont le seule +extension sera WikittySecurity. Chacun de ces wikitty aura pour identifiant +« WikittySecurity'ExtensionName' ». + +Pour stoker les droits qui portent sur les extensions, on fait appel +à des **meta-extensions**. Une + +Pseudo extension est portée par les extensions du wikitty. Exemple avec +WikittySecurity sur un Wikitty Personne qui a une extension Employee et +Customer. Il y a une extension Employee:WikittySecurity et une extension +Customer:WikittySecurity. le séparateur de pseudo-extension = ':' comme css + + +Localisation +============ + On rajoute une pseudo extension WikittyI18n aux extensions du wikitty. Cette pseudo-extension a deux champs : langue et translation @@ -75,15 +142,11 @@ -atetntion au moment de la mmigration +attention au moment de la migration au moment du chargement Pseudo extension ----------------- +================ -Pseudo extension est portée par les extensions du wikitty. Exemple avec -WikittySecurity sur un Wikitty Personne qui a une extension Employee et -Customer. Il y a une extension Employee:WikittySecurity et une extension -Customer:WikittySecurity. le séparateur de pseudo-extension = ':' comme css migration : méthode migrate(oldExtension, newExtension, Wikitty, Locale) Locale pouvant etre null.