Suite à une réflexion sur la sécurité et la localisation de wikitty, voici ce qui avait été prévu (ça fait un peu de temps que c'est sur le svn, mais mieux vaut tard que jamais). (Extrait de : http://svn.nuiton.org/svn/wikitty/trunk/src/site/rst/Spec.rst) 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. 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 sur un Wikitty --------------------------------- Un wikitty a plusieurs extensions, pour chacune de ces extensions, on a plusieurs droits. On distinque quatre niveaux de droits : * 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 personne:wikittyI18n.langue=fr,en,es personne:wikittyI18n.translation=[fr:name=prénom,surname=nom],[en:name=name,surname=surname] personne.name=value ton extension : security dezs champs de sécurité ton extension : i18n des champs i18n ton extension.champs=valeur dans la langue un wikitty ne peut exister que dans une langue à la fois, si tu veux plusieurs langues, tu charges plusieurs fois le wikitty. du coup ton wikitty a une version et une langue. On stocke dans la définition de l'extension chargée la langue dans laquelle elle a été chargée. si pas de i18n, du coup c'est la langue par défaut à chaque fois. Au moins les writers peuvent créer une nouvelle langue. pas de sécurité par langue, trop le bordel ! il serait agréable que seules les extensions demandées soient chargées. dans les restore il faut ajouter (extensions, id, + préchargement d'extensions) attention au moment de la migration au moment du chargement Pseudo extension ================ migration : méthode migrate(oldExtension, newExtension, Wikitty, Locale) Locale pouvant etre null.