Droits d'accès dans SweetWiki

De $1

Version de 23:00, 18 Mai 2025

cette version.

Revenir à liste des archives.

Voir la version actuelle

Introduction

Ici on discute de la manière d'implémenter les droits d'accès dans SweetWiki.

Utilisateurs, groupes, rôles et actions

Inspiration première : la manière dont DekiWiki gère les droits. Dans la partie admin, il y a un control panel qui permet de gérer des "Roles", un rôle étant associé à une action (cf screenshot ci-dessous). Il y a aussi la gestion des utilisateurs et des groupes, un groupe pouvant se composer d'une liste d'utilisateurs et/ou d'autres groupes. Un utilisateur ou un groupe a un role par défaut.

 Snap1.jpg

Spécification des droits pour une resource

Dans DekiWiki, pour chaque page, on spécifie son accès "public, semi-public ou privé", et pour les deux derniers cas, on donne la liste des utilisateurs et/ou des groupes qui ont le droit de modifier ou de voir et modifier.

 Snap2 (2).jpg

Ontologies proposées et exemples d'annotation pour SweetWiki

Nous proposons d'étendre l'ontologie du wiki et d'utiliser conjointement une ontologie intitulée provisoirement amo_ont (Access Management Ontology).

Nous supposons que les home page de SweetWiki contiennent un profil FOAF dédié à SweetWiki (qui pourra être référencé par un profil FOAF "global", un peu à la manière d'Adil qui a des profils FOAF légers/dédiés sur lastfm, etc... et un gros profil FOAF sur un URL de l'inria).

Exemple de profil FOAF dans une home page de sweetwiki

  1. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  2.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  3.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  4.   xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  5.  xmlns:xfoaf="http://www.foafrealm.org/xfoaf/0.1/#"  
  6.  xmlns:ex="http://example.org/ex#"  
  7.  xmlns:dc="http://purl.org/dc/elements/1.1/#"  
  8.  xmlns:wiki="http://sweetwiki.inria.fr/ontology#"  
  9.  xmlns:sparql="http://www.w3.org/2005/sparql-results#"  
  10.  xml:base ="http://sweetwiki.inria.fr/AMO_ontology.rdfs/"   
  11.  xmlns:amo="http://sweetwiki.inria.fr/AMO_ontology.rdfs#" >  <!-- Access Managment Ontology-->   
  12.       
  13.     <foaf:Person rdf:nodeID="AnnaKolomoiska" >  
  14.         <foaf:name>  
  15.             Anna Kolomoiska  
  16.         </foaf:name>  
  17.         <foaf:mbox rdf:resource="kalamo4ka@ukr.net"/>  
  18.         <foaf:nick>  
  19.             kalamo4ka  
  20.         </foaf:nick>  
  21.         <foaf:interest rdf:resource="http://www.wikipedia.org" rdfs:label="Wikipedia"/>  
  22.         <foaf:interest>  
  23.             Rollers  
  24.         </foaf:interest>  
  25.         <foaf:homepage rdf:resource="/HomePage_AnnaKolomoiska"/>  
  26.         <amo:hasRole>  
  27.             <amo:Role rdf:nodeID="Admin"/>  
  28.         </amo:hasRole>  
  29.         <foaf:knows>  
  30.             <foaf:Person rdf:nodeID="AngelaBeesley">  
  31.                 <foaf:name>  
  32.                     Angela Beesley  
  33.                 </foaf:name>  
  34.                 <xfoaf:friendshipLevel>  
  35.                     0.7  
  36.                 </xfoaf:friendshipLevel>  
  37.                 <foaf:homepage rdf:resource="/HomePage_AngelaBeesley"/>  
  38.             </foaf:Person>  
  39.         </foaf:knows>  
  40.         <foaf:knows>  
  41.             <foaf:Person>  
  42.                 <foaf:name>  
  43.                     Nastya Baranenko  
  44.                 </foaf:name>  
  45.                 <xfoaf:friendshipLevel>  
  46.                     0.9  
  47.                 </xfoaf:friendshipLevel>  
  48.             </foaf:Person>  
  49.         </foaf:knows>  
  50.           
  51.     </foaf:Person>  
  52.       
  53. </rdf:RDF>  

Exemple de page annotée pour spécifier un accès restreint

Ici, la page a un accès privé, accessible et modifiable par Ania et le groupe des admins.

  1. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  2.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  3.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  4.   xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  5.  xmlns:xfoaf="http://www.foafrealm.org/xfoaf/0.1/#"  
  6.  xmlns:ex="http://example.org/ex#"  
  7.  xmlns:dc="http://purl.org/dc/elements/1.1/#"  
  8.  xmlns:wiki="http://sweetwiki.inria.fr/ontology#"  
  9.  xmlns:sparql="http://www.w3.org/2005/sparql-results#"  
  10.  xml:base ="http://sweetwiki.inria.fr/AMO_ontology.rdfs/"   
  11.  xmlns:amo="http://sweetwiki.inria.fr/AMO_ontology.rdfs#" >  <!-- Access Managment Ontology-->   
  12.       
  13.   
  14.     <foaf:Document rdf:nodeID="PageBy_AnnaKolomoiska">  
  15.         <foaf:name>  
  16.             PageBy_AnnaKolomoiska  
  17.         </foaf:name>  
  18.         <foaf:maker rdf:nodeID="AnnaKolomoiska"/>  
  19.         <amo:hasAccessType rdf:nodeID="Private"/>  
  20.         <amo:givenAgent>  
  21.             <foaf:Person rdf:nodeID="AnnaKolomoiska"/>  
  22.         </amo:givenAgent>  
  23.         <amo:givenAgent>  
  24.             <foaf:Group rdf:nodeID="GroupAdmins"/>  
  25.         </amo:givenAgent>  
  26.           
  27.     </foaf:Document>  
  28.       
  29. </rdf:RDF>  

Exemple d'annotation définissant le groupe des admins et leurs rôle/actions par défaut

  1. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  2.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  3.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  4.   xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  5.  xmlns:xfoaf="http://www.foafrealm.org/xfoaf/0.1/#"  
  6.  xmlns:ex="http://example.org/ex#"  
  7.  xmlns:dc="http://purl.org/dc/elements/1.1/#"  
  8.  xmlns:wiki="http://sweetwiki.inria.fr/ontology#"  
  9.  xmlns:sparql="http://www.w3.org/2005/sparql-results#"  
  10.  xml:base ="http://sweetwiki.inria.fr/AMO_ontology.rdfs/"   
  11.  xmlns:amo="http://sweetwiki.inria.fr/AMO_ontology.rdfs#" >  <!-- Access Managment Ontology-->   
  12.    
  13.     <foaf:Group rdf:nodeID="GroupAdmins">  
  14.         <foaf:name>  
  15.             Group of Admins   
  16.         </foaf:name>  
  17.         <foaf:member>  
  18.             <foaf:Person rdf:nodeID="AnnaKolomoiska"/>  
  19.         </foaf:member>    
  20.         <amo:hasRole>  
  21.             <amo:Role rdf:nodeID="Admin"/>  
  22.         </amo:hasRole>  
  23.           
  24.     </foaf:Group>  
  25.       
  26.       
  27. </rdf:RDF>  

 

Why "hasRole" and "Role" are used here:

        <amo:hasRole>
            <amo:Role rdf:nodeID="Admin"/>
        </amo:hasRole>

Because: "hasRole" is a property of class Group indicating role, while "Role" is a class and "Admin" is object of this class.

It's correct?

Description des rôles

  1. <rdf:RDF  
  2.  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  3.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  4.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  5.  xmlns:wiki="http://sweetwiki.inria.fr/ontology#"  
  6.  xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  7.  xml:base ="http://sweetwiki.inria.fr/AMO_ontology.rdfs/"   
  8.  xmlns:amo="http://sweetwiki.inria.fr/AMO_ontology.rdfs#" >  <!-- Access Managment Ontology-->  
  9.       
  10.     <rdf:Description rdf:about="#Guest">  
  11.             <amo:hasAction rdf:nodeID="Read"/>  
  12.     </rdf:Description>  
  13.       
  14.     <rdf:Description rdf:about="#Contributor">  
  15.             <amo:hasAction rdf:nodeID="Read"/>  
  16.             <amo:hasAction rdf:nodeID="ModifyContents"/>  
  17.     </rdf:Description>  
  18.       
  19.     <rdf:Description rdf:about="#Admin">  
  20.           <amo:hasAction rdf:nodeID="Read"/>  
  21.           <amo:hasAction rdf:nodeID="ModifyRights"/>  
  22.           <amo:hasAction rdf:nodeID="ModifyContents"/>  
  23.           <amo:hasAction rdf:nodeID="Delete"/>  
  24.     </rdf:Description>  
  25.   
  26. </rdf:RDF>  

Descrition des types d'accès

  1. <rdf:RDF  
  2.  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  3.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  4.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  5.  xmlns:wiki="http://sweetwiki.inria.fr/ontology#"  
  6.  xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  7.  xml:base ="http://sweetwiki.inria.fr/AMO_ontology.rdfs/"   
  8.  xmlns:amo="http://sweetwiki.inria.fr/AMO_ontology.rdfs#" >  <!-- Access Managment Ontology-->  
  9.           
  10.           
  11.     <rdf:Description rdf:about="#Private">  
  12.           <rdfs:comment>  
  13.                 nobody can do nothing, except given ageents  
  14.           </rdfs:comment>  
  15.     </rdf:Description>  
  16.       
  17.     <rdf:Description rdf:about="#SemiPublic">    
  18.            <amo:availableAction rdf:nodeID="ModifyContents"/>            
  19.            <amo:availableAction rdf:nodeID="Delete"/>   
  20.     </rdf:Description>  
  21.       
  22.     <rdf:Description rdf:about="#Public">  
  23.              <amo:availableAction rdf:nodeID="Read"/>  
  24.            <amo:availableAction rdf:nodeID="ModifyContents"/>  
  25.             <amo:availableAction rdf:nodeID="Delete"/>  
  26.     </rdf:Description>  
  27.       
  28.     <rdf:Description rdf:about="#givenAgent">  
  29.             <amo:hasAction rdf:nodeID="Read"/>  
  30.             <amo:hasAction rdf:nodeID="ModifyContents"/>  
  31.             <amo:hasAction rdf:nodeID="Delete"/>  
  32.     </rdf:Description>  
  33.   
  34.   
  35. </rdf:RDF>  

 

 

Et enfin l'ontologie dans sa version de travail

  1. <rdf:RDF  
  2.  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  3.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  4.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  5.  xmlns:wiki="http://sweetwiki.inria.fr/ontology#"  
  6.  xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  7.  xml:base ="http://sweetwiki.inria.fr/AMO_ontology.rdfs/">   <!-- Access Managment Ontology-->  
  8.       
  9.     <owl:Ontology rdf:about="#">  
  10.         <rdfs:comment>  
  11.             Ontology for managment access rights  
  12.         </rdfs:comment>  
  13.         <rdfs:label>  
  14.             Access Managment Ontology  
  15.         </rdfs:label>  
  16.     </owl:Ontology>  
  17.       
  18.     <!--Meta -->  
  19.       
  20.     <owl:TransitiveProperty rdf:about="http://www.w3.org/2000/01/rdf-schema#subClassOf"/>  
  21.       
  22.     <!--Class-->  
  23.       
  24.     <rdfs:Class rdf:ID="Role">  
  25.         <rdfs:label xml:lang="en">  
  26.             role  
  27.         </rdfs:label>  
  28.         <rdfs:comment xml:lang="en">  
  29.             a role  
  30.         </rdfs:comment>  
  31.     </rdfs:Class>  
  32.       
  33.     <rdfs:Class rdf:ID="Admin">  
  34.         <rdfs:subClassOf rdf:resource="#Role"/>  
  35.         <rdfs:label xml:lang="en">  
  36.             administrator  
  37.         </rdfs:label>  
  38.         <rdfs:comment xml:lang="en">  
  39.             have the role of administrator  
  40.         </rdfs:comment>  
  41.     </rdfs:Class>  
  42.       
  43.     <rdfs:Class rdf:ID="Contributor">  
  44.         <rdfs:subClassOf rdf:resource="#Role"/>  
  45.         <rdfs:label xml:lang="en">  
  46.             contributor  
  47.         </rdfs:label>  
  48.         <rdfs:comment xml:lang="en">  
  49.             have the role of contributor  
  50.         </rdfs:comment>  
  51.     </rdfs:Class>  
  52.       
  53.     <rdfs:Class rdf:ID="Guest">  
  54.         <rdfs:subClassOf rdf:resource="#Role"/>  
  55.         <rdfs:label xml:lang="en">  
  56.             guest  
  57.         </rdfs:label>  
  58.         <rdfs:comment xml:lang="en">  
  59.             have the role of guest  
  60.         </rdfs:comment>  
  61.     </rdfs:Class>  
  62.       
  63.     <rdfs:Class rdf:ID="Action">  
  64.         <rdfs:label xml:lang="en">  
  65.             action  
  66.         </rdfs:label>  
  67.         <rdfs:comment xml:lang="en">  
  68.             an action  
  69.         </rdfs:comment>  
  70.     </rdfs:Class>  
  71.       
  72.     <rdfs:Class rdf:ID="Read">  
  73.         <rdfs:subClassOf rdf:resource="#Action"/>  
  74.         <rdfs:label xml:lang="en">  
  75.             read  
  76.         </rdfs:label>  
  77.         <rdfs:comment xml:lang="en">  
  78.             kind of action-read  
  79.         </rdfs:comment>  
  80.     </rdfs:Class>  
  81.       
  82.     <rdfs:Class rdf:ID="ModifyRights">  
  83.         <rdfs:subClassOf rdf:resource="#Action"/>  
  84.         <rdfs:label xml:lang="en">  
  85.             modify rights  
  86.         </rdfs:label>  
  87.         <rdfs:comment xml:lang="en">  
  88.             kind of action-modify rights of users  
  89.         </rdfs:comment>  
  90.     </rdfs:Class>  
  91.       
  92.     <rdfs:Class rdf:ID="ModifyContent">  
  93.         <rdfs:subClassOf rdf:resource="#Action"/>  
  94.         <rdfs:label xml:lang="en">  
  95.             modify content  
  96.         </rdfs:label>  
  97.         <rdfs:comment xml:lang="en">  
  98.             kind of action-modify content of pages  
  99.         </rdfs:comment>  
  100.     </rdfs:Class>  
  101.       
  102.     <rdfs:Class rdf:ID="Delete">  
  103.         <rdfs:subClassOf rdf:resource="#Action"/>  
  104.         <rdfs:label xml:lang="en">  
  105.             delete  
  106.         </rdfs:label>  
  107.         <rdfs:comment xml:lang="en">  
  108.             kind of action-delete  
  109.         </rdfs:comment>  
  110.     </rdfs:Class>  
  111.       
  112.     <rdfs:Class rdf:ID="AccessType">  
  113.         <rdfs:label xml:lang="en">  
  114.             access type  
  115.         </rdfs:label>  
  116.         <rdfs:comment xml:lang="en">  
  117.             type of access  
  118.         </rdfs:comment>  
  119.     </rdfs:Class>  
  120.       
  121.     <rdfs:Class rdf:ID="Private">  
  122.         <rdfs:subClassOf rdf:resource="#AccessType"/>  
  123.         <rdfs:label xml:lang="en">  
  124.             private  
  125.         </rdfs:label>  
  126.         <rdfs:comment xml:lang="en">  
  127.             private access-nobody can read, modify, delete, except given persons and groups  
  128.         </rdfs:comment>  
  129.     </rdfs:Class>  
  130.       
  131.     <rdfs:Class rdf:ID="SemiPublic">  
  132.         <rdfs:subClassOf rdf:resource="#AccessType"/>  
  133.         <rdfs:label xml:lang="en">  
  134.             semiPublic  
  135.         </rdfs:label>  
  136.         <rdfs:comment xml:lang="en">  
  137.             semiPublic access-everyone can read, but only given persons and groups can modify and delete  
  138.         </rdfs:comment>  
  139.     </rdfs:Class>  
  140.       
  141.     <rdfs:Class rdf:ID="Public">  
  142.         <rdfs:subClassOf rdf:resource="#AccessType"/>  
  143.         <rdfs:label xml:lang="en">  
  144.             public  
  145.         </rdfs:label>  
  146.         <rdfs:comment xml:lang="en">  
  147.             public access-everyone can read, modify and delete  
  148.         </rdfs:comment>  
  149.     </rdfs:Class>  
  150.       
  151.       
  152.     <!--Properties-->  
  153.       
  154.     <rdf:Property rdf:ID="hasAction">  
  155.         <rdfs:domain rdf:resource="#Role"/>  
  156.         <rdfs:range rdf:resource="#Action"/>  
  157.         <rdfs:label xml:lang="en">  
  158.             action for this role  
  159.         </rdfs:label>  
  160.     </rdf:Property>     
  161.       
  162.     <rdf:Property rdf:ID="hasRole">  
  163.         <rdfs:domain rdf:resource="http://xmlns.com/foaf/0.1/#Agent"/>  
  164.         <rdfs:range rdf:resource="#Role"/>  
  165.         <rdfs:label xml:lang="en">  
  166.             role of agent  
  167.         </rdfs:label>  
  168.     </rdf:Property>  
  169.       
  170.     <rdf:Property rdf:ID="hasAccessType">  
  171.         <rdfs:domain rdf:resource="http://sweetwiki.inria.fr/ontology#Document"/>  
  172.         <rdfs:range rdf:resource="#AccessType"/>  
  173.         <rdfs:label xml:lang="en">  
  174.             access type to document  
  175.         </rdfs:label>  
  176.     </rdf:Property>  
  177.       
  178.     <rdf:Property rdf:ID="givenAgent">  
  179.         <rdfs:domain rdf:resource="#Document"/>  
  180.         <rdfs:range rdf:resource="http://xmlns.com/foaf/0.1/#Agent"/>  
  181.         <rdfs:label xml:lang="en">  
  182.             agent, who has rights to modify and delete page  
  183.         </rdfs:label>  
  184.     </rdf:Property>  
  185.       
  186.     <rdf:Property rdf:ID="availableAction">  
  187.           
  188.         <rdfs:domain rdf:resource="#AccessType"/>  
  189.         <rdfs:range rdf:resource="http://xmlns.com/foaf/0.1/#Action"/>  
  190.         <rdfs:label xml:lang="en">  
  191.             rights witch you have on page with such access type, if you're ordinary user   
  192.         </rdfs:label>  
  193.     </rdf:Property>  
  194.     
  195. </rdf:RDF>  

Guillaume : je ne comprend pas la dernière déclaration dans l'ontology, on a dans l'ontologie 'givenAgent' qui a pour domain 'Document' et pour range 'Agent'

 

  1.     <rdf:Property rdf:ID="avialableAction">  
  2.         <rdfs:domain rdf:resource="#AccessType" />  
  3.         <rdfs:range rdf:resource="http://xmlns.com/foaf/0.1/#Action" />  
  4.         <rdfs:label xml:lang="en">  
  5.             rights witch givenAgents get in this accessType  
  6.         </rdfs:label>  
  7.     </rdf:Property>  

 

  1. avialableAction ==> availableAction

  2. je ne comprend pas à quoi ca sert en sachant hasAccessType défini déjà les actions disponible

pas de gestion de l'héritage des droits? Rien n'empêche de le modéliser même si on ne l'implèmente pas ca peut être intéressant si on publit l'ontologie

SPARQL Requests examples

Ontology file used :

Annotation file used :

PREFIX  foaf: <http://xmlns.com/foaf/0.1/>
select  ?name 
where{
?x foaf:nick ?name
}

Result :

  1. <?xml version='1.0' encoding='Cp1251'?>  
  2. <cos:result xmlns:cos='http://www.inria.fr/acacia/corese#'>  
  3. <cos:tquery>  
  4. <![CDATA[prefix foaf: <http://xmlns.com/foaf/0.1/>  
  5. select list display xml ?name   
  6. where  
  7. { ?x foaf:nick ?name . }   
  8. ]]></cos:tquery>  
  9. <cos:info><![CDATA[ 
  10. 0.00 s for 1 projections 
  11. ]]></cos:info>  
  12. <sparql xmlns='http://www.w3.org/2005/sparql-results#' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' >  
  13. <head>  
  14. <variable name='name'/>  
  15. </head>  
  16. <results ordered='false' distinct='false' >  
  17. <result>  
  18. <binding name='name'><literal datatype='http://www.w3.org/2001/XMLSchema#string'>  
  19.             kalamo4ka  
  20.         </literal></binding>  
  21. </result>  
  22. </results>  
  23. </sparql>  
  24. </cos:result>  

Discussions et questions

  • Au lieu de définir les groupes et les rôles par défaut : utiliser des règles OWL lite ?
  • Utilisation de SIOC:user ou sioc:user_groups_of au lieu de foaf:agent
  • Problème de sécurité, ne pas indiquer à quels groupes les personnes appartiennent dans le home page, mais dans des annotations non accessibles de l'extérieur,
  • Utiliser SIOC types qui définit déjà ce qu'est un contributeur, un guest, un admin ? Soucis : SIOC Types a l'air non fini et surtout ces rôles sont au niveau du "site" et mal définis...