Droits d'accès dans SweetWiki

De $1

Version de 05:56, 19 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. <?xml version="1.0" encoding="utf-8"?>  
  2. <rdf:RDF  
  3.  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  4.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  5.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  6.  xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  7.  xml:base="http://sweetwiki.inria.fr/AMO_ontology.rdfs"  
  8.  xmlns:xfoaf="http://www.foafrealm.org/xfoaf/0.1/#"  
  9.  xmlns="http://sweetwiki.inria.fr/AMO_ontology.rdfs#">   <!-- Access Managment Ontology-->   
  10.       
  11.     <foaf:Person rdf:about="#AnnaKolomoiska" >  
  12.         <foaf:name>  
  13.             Anna Kolomoiska  
  14.         </foaf:name>  
  15.         <foaf:mbox rdf:resource="kalamo4ka@ukr.net"/>  
  16.         <foaf:nick>  
  17.             kalamo4ka  
  18.         </foaf:nick>  
  19.         <foaf:interest rdf:resource="http://www.wikipedia.org" rdfs:label="Wikipedia"/>  
  20.         <foaf:interest>  
  21.             Rollers  
  22.         </foaf:interest>  
  23.         <foaf:homepage rdf:resource="#HomePage_AnnaKolomoiska"/>  
  24.         <hasRole rdf:resource="#Admin"/>  
  25.         <foaf:knows>  
  26.             <foaf:Person rdf:about="#AngelaBeesley">  
  27.                 <foaf:name>  
  28.                     Angela Beesley  
  29.                 </foaf:name>  
  30.                 <xfoaf:friendshipLevel>  
  31.                     0.7  
  32.                 </xfoaf:friendshipLevel>  
  33.                 <foaf:homepage rdf:resource="#HomePage_AngelaBeesley"/>  
  34.             </foaf:Person>  
  35.         </foaf:knows>  
  36.         <foaf:knows>  
  37.             <foaf:Person>  
  38.                 <foaf:name>  
  39.                     Nastya Baranenko  
  40.                 </foaf:name>  
  41.                 <xfoaf:friendshipLevel>  
  42.                     0.9  
  43.                 </xfoaf:friendshipLevel>  
  44.             </foaf:Person>  
  45.         </foaf:knows>         
  46.     </foaf:Person>     
  47. </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. <?xml version="1.0" encoding="utf-8"?>  
  2. <rdf:RDF  
  3.  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  4.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  5.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  6.  xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  7.  xml:base="http://sweetwiki.inria.fr/AMO_ontology.rdfs"  
  8.  xmlns:xfoaf="http://www.foafrealm.org/xfoaf/0.1/#"  
  9.  xmlns="http://sweetwiki.inria.fr/AMO_ontology.rdfs#">   <!-- Access Managment Ontology-->    
  10.   
  11.     <Document rdf:about="#PageBy_AnnaKolomoiska">  
  12.         <foaf:name>  
  13.             PageBy_AnnaKolomoiska  
  14.         </foaf:name>  
  15.         <creator rdf:resource="#AnnaKolomoiska"/>  
  16.         <hasAccessType rdf:resource="#Private"/>  
  17.         <hasGivenAgent rdf:resource="#AnnaKolomoiska"/>      
  18.         <hasGivenAgent rdf:resource="#GroupAdmins"/>        
  19.     </Document>    
  20. </rdf:RDF>  

 

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

 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <rdf:RDF  
  3.  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  4.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  5.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  6.  xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  7.  xml:base="http://sweetwiki.inria.fr/AMO_ontology.rdfs"  
  8.  xmlns:xfoaf="http://www.foafrealm.org/xfoaf/0.1/#"  
  9.  xmlns="http://sweetwiki.inria.fr/AMO_ontology.rdfs#">   <!-- Access Managment Ontology-->   
  10.    
  11.     <Group rdf:about="#GroupAdmins">  
  12.         <foaf:name>  
  13.             Group of Admins   
  14.         </foaf:name>  
  15.         <foaf:member>  
  16.             <foaf:Person rdf:about="#AnnaKolomoiska"/>  
  17.         </foaf:member>    
  18.         <hasRole rdf:resource="#Admin"/>       
  19.     </Group>  
  20. </rdf:RDF>  

 

Ontology

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <rdf:RDF  
  3.  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  
  4.  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"  
  5.  xmlns:owl="http://www.w3.org/2002/07/owl#"  
  6.  xmlns:foaf="http://xmlns.com/foaf/0.1/#"  
  7.  xml:base="http://sweetwiki.inria.fr/AMO_ontology.rdfs"  
  8.  xmlns:xfoaf="http://www.foafrealm.org/xfoaf/0.1/#"  
  9.  xmlns="http://sweetwiki.inria.fr/AMO_ontology.rdfs#" >  
  10.       
  11.         <!-- Access Managment Ontology-->  
  12.       
  13.     <owl:Ontology rdf:about="http://sweetwiki.inria.fr/AMO_ontology.rdfs">  
  14.         <rdfs:comment>  
  15.             Ontology for managment access rights  
  16.         </rdfs:comment>  
  17.         <rdfs:label>  
  18.             Access Managment Ontology  
  19.         </rdfs:label>  
  20.     </owl:Ontology>  
  21.       
  22.       
  23.     <!-- exteranal clesses  
  24.       
  25.     Class: foaf:Agent (http://xmlns.com/foaf/spec/#term_Agent)  
  26.     Agent - An agent (eg. person, group, software or physical artifact).  
  27.       
  28.     Class: foaf:Document (http://xmlns.com/foaf/spec/#term_Document)  
  29.     Document - A document.  
  30.   
  31.     -->  
  32.       
  33.     <rdfs:Class rdf:ID="Agent">  
  34.         <rdfs:subClassOf rdf:resource="foaf:Agent"/>  
  35.     </rdfs:Class>  
  36.       
  37.     <rdfs:Class rdf:ID="Document">  
  38.         <rdfs:subClassOf rdf:resource="foaf:Document"/>  
  39.     </rdfs:Class>  
  40.       
  41.   
  42.     <rdf:Property rdf:ID="creator">  
  43.         <rdfs:domain rdf:resource="#Docement"/>  
  44.         <rdfs:range rdf:resource="#Agent"/>  
  45.         <rdfs:label xml:lang="en">  
  46.             creator of resourse  
  47.         </rdfs:label>  
  48.          <rdfs:subPropertyOf rdf:resource="foaf:maker"/>  
  49.     </rdf:Property>  
  50.   
  51.     <!--Class-->  
  52.       
  53.     <rdfs:Class rdf:ID="Role">  
  54.         <rdfs:label xml:lang="en">  
  55.             role  
  56.         </rdfs:label>  
  57.         <rdfs:comment xml:lang="en">  
  58.             a role  
  59.         </rdfs:comment>  
  60.     </rdfs:Class>  
  61.       
  62.     <rdfs:Class rdf:ID="Admin">  
  63.         <rdf:type rdf:resource="#Role"/>  
  64.         <rdfs:label xml:lang="en">  
  65.             administrator  
  66.         </rdfs:label>  
  67.         <rdfs:comment xml:lang="en">  
  68.             role of administrator  
  69.         </rdfs:comment>  
  70.     </rdfs:Class>  
  71.       
  72.     <rdfs:Class rdf:ID="Contributor">  
  73.         <rdf:type rdf:resource="#Role"/>  
  74.         <rdfs:label xml:lang="en">  
  75.             contributor  
  76.         </rdfs:label>  
  77.         <rdfs:comment xml:lang="en">  
  78.             role of contributor  
  79.         </rdfs:comment>  
  80.     </rdfs:Class>  
  81.       
  82.     <rdfs:Class rdf:ID="Guest">  
  83.         <rdf:type rdf:resource="#Role"/>  
  84.         <rdfs:label xml:lang="en">  
  85.             guest  
  86.         </rdfs:label>  
  87.         <rdfs:comment xml:lang="en">  
  88.             of guest  
  89.         </rdfs:comment>  
  90.     </rdfs:Class>  
  91.       
  92.     <rdfs:Class rdf:ID="Action">  
  93.         <rdfs:label xml:lang="en">  
  94.             action  
  95.         </rdfs:label>  
  96.         <rdfs:comment xml:lang="en">  
  97.             an action on a resource  
  98.         </rdfs:comment>  
  99.     </rdfs:Class>  
  100.       
  101.     <rdfs:Class rdf:ID="ReadContent">  
  102.         <rdf:type rdf:resource="#Action"/>  
  103.         <rdfs:label xml:lang="en">  
  104.             read  
  105.         </rdfs:label>  
  106.         <rdfs:comment xml:lang="en">  
  107.             kind of action-read content of resource  
  108.         </rdfs:comment>  
  109.     </rdfs:Class>  
  110.       
  111.     <rdfs:Class rdf:ID="ModifyRights">  
  112.         <rdf:type rdf:resource="#Action"/>  
  113.         <rdfs:label xml:lang="en">  
  114.             modify rights  
  115.         </rdfs:label>  
  116.         <rdfs:comment xml:lang="en">  
  117.             kind of action-modify rights of users  
  118.         </rdfs:comment>  
  119.     </rdfs:Class>  
  120.       
  121.     <rdfs:Class rdf:ID="ModifyContent">  
  122.         <rdf:type rdf:resource="#Action"/>  
  123.         <rdfs:label xml:lang="en">  
  124.             modify content  
  125.         </rdfs:label>  
  126.         <rdfs:comment xml:lang="en">  
  127.             kind of action-modify content of resource  
  128.         </rdfs:comment>  
  129.     </rdfs:Class>  
  130.       
  131.     <rdfs:Class rdf:ID="DeleteContent">  
  132.         <rdf:type rdf:resource="#Action"/>  
  133.         <rdfs:label xml:lang="en">  
  134.             delete  
  135.         </rdfs:label>  
  136.         <rdfs:comment xml:lang="en">  
  137.             kind of action-delete content of resource  
  138.         </rdfs:comment>  
  139.     </rdfs:Class>  
  140.       
  141.     <rdfs:Class rdf:ID="AccessType">  
  142.         <rdfs:label xml:lang="en">  
  143.             access type  
  144.         </rdfs:label>  
  145.         <rdfs:comment xml:lang="en">  
  146.             type of access  
  147.         </rdfs:comment>  
  148.     </rdfs:Class>  
  149.       
  150.     <rdfs:Class rdf:ID="Private">  
  151.         <rdf:type rdf:resource="#AccessType"/>  
  152.         <rdfs:label xml:lang="en">  
  153.             private  
  154.         </rdfs:label>  
  155.         <rdfs:comment xml:lang="en">  
  156.             private access-nobody can read, modify, delete, except given persons and groups  
  157.         </rdfs:comment>  
  158.     </rdfs:Class>  
  159.       
  160.     <rdfs:Class rdf:ID="SemiPublic">  
  161.         <rdf:type rdf:resource="#AccessType"/>  
  162.         <rdfs:label xml:lang="en">  
  163.             semiPublic  
  164.         </rdfs:label>  
  165.         <rdfs:comment xml:lang="en">  
  166.             semiPublic access-everyone can read, but only given persons and groups can modify and delete  
  167.         </rdfs:comment>  
  168.     </rdfs:Class>  
  169.       
  170.     <rdfs:Class rdf:ID="Public">  
  171.         <rdf:type rdf:resource="#AccessType"/>  
  172.         <rdfs:label xml:lang="en">  
  173.             public  
  174.         </rdfs:label>  
  175.         <rdfs:comment xml:lang="en">  
  176.             public access-everyone can read, modify and delete  
  177.         </rdfs:comment>  
  178.     </rdfs:Class>  
  179.       
  180.       
  181.     <!--Properties-->  
  182.       
  183.     <rdf:Property rdf:ID="hasAction">  
  184.         <rdfs:domain rdf:resource="#Role"/>  
  185.         <rdfs:range rdf:resource="#Action"/>  
  186.         <rdfs:label xml:lang="en">  
  187.             action for this role  
  188.         </rdfs:label>  
  189.     </rdf:Property>  
  190.       
  191.     <rdf:Property rdf:ID="hasRole">  
  192.         <rdfs:domain rdf:resource="#Agent"/>  
  193.         <rdfs:range rdf:resource="#Role"/>  
  194.         <rdfs:label xml:lang="en">  
  195.             role of agent  
  196.         </rdfs:label>  
  197.     </rdf:Property>  
  198.       
  199.     <rdf:Property rdf:ID="hasAccessType">  
  200.         <rdfs:domain rdf:resource="#Document"/>  
  201.         <rdfs:range rdf:resource="#AccessType"/>  
  202.         <rdfs:label xml:lang="en">  
  203.             access type to document  
  204.         </rdfs:label>  
  205.     </rdf:Property>  
  206.       
  207.     <rdf:Property rdf:ID="hasGivenAgent">  
  208.         <rdfs:domain rdf:resource="#Document"/>  
  209.         <rdfs:range rdf:resource="#Agent"/>  
  210.         <rdfs:label xml:lang="en">  
  211.             agent, who has rights to modify and delete page  
  212.         </rdfs:label>  
  213.     </rdf:Property>  
  214.       
  215.     <rdf:Property rdf:ID="hasAuthorizedAction">  
  216.           
  217.         <rdfs:domain rdf:resource="#Agent"/>  
  218.         <rdfs:range rdf:resource="#Action"/>  
  219.         <rdfs:label xml:lang="en">  
  220.             rights, wich agent has (depending on the role)  
  221.         </rdfs:label>  
  222.     </rdf:Property>  
  223.       
  224.         <!--Descriptions-->  
  225.       
  226.     <rdf:Description rdf:about="#Guest">  
  227.         <hasAction rdf:resource="#Read"/>  
  228.     </rdf:Description>  
  229.       
  230.     <rdf:Description rdf:about="#Contributor">  
  231.         <hasAction rdf:resource="#Read"/>  
  232.         <hasAction rdf:resource="#ModifyContent"/>  
  233.     </rdf:Description>  
  234.       
  235.     <rdf:Description rdf:about="#Admin">  
  236.         <hasAction rdf:resource="#Read"/>  
  237.         <hasAction rdf:resource="#ModifyRights"/>  
  238.         <hasAction rdf:resource="#ModifyContent"/>  
  239.         <hasAction rdf:resource="#Delete"/>  
  240.     </rdf:Description>  
  241.       
  242. </rdf:RDF>  

 Rules

Rules of access.

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <!DOCTYPE rdf:RDF [  
  4.   
  5. <!ENTITY cos "http://www.inria.fr/acacia/corese#">  
  6. <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#">  
  7. <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#">  
  8. <!ENTITY amo "http://sweetwiki.inria.fr/AMO_ontology.rdfs#">  
  9. <!ENTITY foaf "http://xmlns.com/foaf/0.1/#">  
  10. ]>  
  11.   
  12.   
  13. <rdf:RDF xmlns:rdfs="&rdfs;" xmlns:rdf="&rdf;" xmlns:cos="&cos;"  xmlns:amo="&amo;" xmlns:foaf="&foaf;">  
  14.    
  15.     <cos:rule cos:name="Public">  
  16.         <!-- if access Type of page "Public"-guests have only such actions -->  
  17.         <cos:if>  
  18.             PREFIX amo: &lt;&amo;&gt;  
  19.             {   
  20.             ?r amo:hasAccessType amo:Public.  
  21.             ?a rdf:type amo:Agent  
  22.             }  
  23.         </cos:if>   
  24.         <cos:then>  
  25.             {   
  26.             ?a amo:hasAuthorizedAction amo:ModifyContents.  
  27.             ?a amo:hasAuthorizedAction amo:Delete.  
  28.             ?a amo:hasAuthorizedAction amo:Read  
  29.             }  
  30.         </cos:then>  
  31.     </cos:rule>  
  32.          
  33.     <cos:rule cos:name="SemiPublic">  
  34.         <!-- if access Type of page "SemiPublic"-guests have only such actions -->  
  35.         <cos:if>  
  36.             PREFIX amo: &lt;&amo;&gt;                     
  37.             {   
  38.             ?r amo:hasAccessType amo:SemiPublic.  
  39.             ?a rdf:type amo:Agent  
  40.             }  
  41.         </cos:if>          
  42.         <cos:then>  
  43.             {   
  44.             ?a amo:hasAuthorizedAction amo:Read   
  45.             }  
  46.         </cos:then>  
  47.           
  48.     </cos:rule>  
  49.       
  50.     <cos:rule cos:name="SemiPublic_Contributor">  
  51.         <!-- if access Type of page "SemiPublic"-Contributors have only such actions -->  
  52.         <cos:if>  
  53.             PREFIX amo: &lt;&amo;&gt;                     
  54.             {   
  55.             ?r amo:hasAccessType amo:SemiPublic.  
  56.             ?a amo:hasRole amo:Contributor            
  57.             }  
  58.         </cos:if>         
  59.         <cos:then>  
  60.             {   
  61.             ?a amo:hasAuthorizedAction amo:Read.  
  62.             ?a amo:hasAuthorizedAction amo:ModifyContent  
  63.             }  
  64.         </cos:then>  
  65.     </cos:rule>  
  66.       
  67.     <cos:rule cos:name="SemiPublic_Admin">  
  68.         <!-- if access Type of page "SemiPublic"-Admins have only such actions -->  
  69.         <cos:if>  
  70.             PREFIX amo: &lt;&amo;&gt;                     
  71.             {   
  72.             ?r amo:hasAccessType amo:SemiPublic.  
  73.             ?a amo:hasRole amo:Admin              
  74.             }  
  75.         </cos:if>         
  76.         <cos:then>  
  77.             {   
  78.             ?a amo:hasAuthorizedAction amo:Read.  
  79.             ?a amo:hasAuthorizedAction amo:ModifyContent.  
  80.             ?a amo:hasAuthorizedAction amo:DeleteContent  
  81.             }  
  82.         </cos:then>  
  83.     </cos:rule>  
  84.       
  85.     <cos:rule cos:name="SemiPublic_Given">  
  86.         <!-- if access Type of page "SemiPublic"-given persons have only such actions -->  
  87.         <cos:if>  
  88.             PREFIX amo: &lt;&amo;&gt;                     
  89.             {   
  90.             ?r amo:hasAccessType amo:SemiPublic.  
  91.             ?r amo:hasGivenAgent ?a  
  92.             }  
  93.         </cos:if>         
  94.         <cos:then>  
  95.             {   
  96.             ?a amo:hasAuthorizedAction amo:Read.  
  97.             ?a amo:hasAuthorizedAction amo:ModifyContent.  
  98.             ?a amo:hasAuthorizedAction amo:DeleteContent  
  99.             }  
  100.         </cos:then>  
  101.     </cos:rule>  
  102.       
  103.     <cos:rule cos:name="Private_Contributor">  
  104.         <!-- if access Type of page "SemiPublic"-Contributors have only such actions -->  
  105.         <cos:if>  
  106.             PREFIX amo: &lt;&amo;&gt;                     
  107.             {   
  108.             ?r amo:hasAccessType amo:Private.  
  109.             ?a amo:hasRole amo:Contributor            
  110.             }  
  111.         </cos:if>         
  112.         <cos:then>  
  113.             {   
  114.             ?a amo:hasAuthorizedAction amo:Read.  
  115.             }  
  116.         </cos:then>  
  117.     </cos:rule>  
  118.   
  119.     <cos:rule cos:name="Private_Admin">  
  120.         <!-- if access Type of page "SemiPublic"-Admins have only such actions -->  
  121.         <cos:if>  
  122.             PREFIX amo: &lt;&amo;&gt;                     
  123.             {   
  124.             ?r amo:hasAccessType amo:Private.  
  125.             ?a amo:hasRole amo:Admin              
  126.             }  
  127.         </cos:if>         
  128.         <cos:then>  
  129.             {   
  130.             ?a amo:hasAuthorizedAction amo:Read.  
  131.             ?a amo:hasAuthorizedAction amo:ModifyContent.  
  132.             ?a amo:hasAuthorizedAction amo:DeleteContent  
  133.             }  
  134.         </cos:then>  
  135.     </cos:rule>  
  136.   
  137.     <cos:rule cos:name="Private_Given">  
  138.         <!-- if access Type of page "SemiPublic"-given persons have only such actions -->  
  139.         <cos:if>  
  140.             PREFIX amo: &lt;&amo;&gt;                     
  141.             {   
  142.             ?r amo:hasAccessType amo:Private.  
  143.             ?r amo:hasGivenAgent ?a  
  144.             }  
  145.         </cos:if>         
  146.         <cos:then>  
  147.             {   
  148.             ?a amo:hasAuthorizedAction amo:Read.  
  149.             ?a amo:hasAuthorizedAction amo:ModifyContent.  
  150.             ?a amo:hasAuthorizedAction amo:DeleteContent  
  151.             }  
  152.         </cos:then>  
  153.     </cos:rule>  
  154.       
  155.     <cos:rule cos:name="Creator">  
  156.         <!--  access for creator -->  
  157.         <cos:if>  
  158.             PREFIX amo: &lt;&amo;&gt;                 
  159.             {   
  160.             ?r amo:creator ?a  
  161.             }  
  162.         </cos:if>         
  163.         <cos:then>  
  164.             {   
  165.             ?a amo:hasAuthorizedAction amo:Read.  
  166.             ?a amo:hasAuthorizedAction amo:ModifyContent.  
  167.             ?a amo:hasAuthorizedAction amo:DeleteContent  
  168.             }  
  169.         </cos:then>  
  170.     </cos:rule>  
  171.       
  172.    
  173. </rdf:RDF>  

 

SPARQL Requests examples

Example 1.

To get list agents, who can DeleteContent

File name :

all files

Query :

prefix amo: <http://sweetwiki.inria.fr/AMO_ontology.rdfs#>
select ?resource ?agent where {
?agent amo:hasAuthorizedActionOnResource ?auth_action_on_res.
?auth_action_on_res amo:hasResource ?resource
?auth_action_on_res amo:hasActionOnResource amo:DeleteContent
}

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 amo: <http://sweetwiki.inria.fr/AMO_ontology.rdfs#>  
  5. select list display xml ?resource ?agent   
  6. where  
  7. { ?agent amo:hasAuthorizedActionOnResource ?auth_action_on_res . ?auth_action_on_res amo:hasResource ?resource . ?auth_action_on_res amo:hasActionOnResource amo:DeleteContent . }   
  8. ]]></cos:tquery>  
  9. <cos:info><![CDATA[ 
  10. 0.00 s for 5 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='resource'/>  
  15. <variable name='agent'/>  
  16. </head>  
  17. <results ordered='false' distinct='false' >  
  18. <result>  
  19. <binding name='resource'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#PageBy_AngelaBeesley</uri></binding>  
  20. <binding name='agent'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#AnnaKolomoiska</uri></binding>  
  21. </result>  
  22. <result>  
  23. <binding name='resource'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#PageBy_AngelaBeesley</uri></binding>  
  24. <binding name='agent'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#GroupAdmins</uri></binding>  
  25. </result>  
  26. <result>  
  27. <binding name='resource'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#PageBy_AngelaBeesley</uri></binding>  
  28. <binding name='agent'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#AngelaBeesley</uri></binding>  
  29. </result>  
  30. <result>  
  31. <binding name='resource'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#PageBy_AnnaKolomoiska</uri></binding>  
  32. <binding name='agent'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#GroupAdmins</uri></binding>  
  33. </result>  
  34. <result>  
  35. <binding name='resource'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#PageBy_AnnaKolomoiska</uri></binding>  
  36. <binding name='agent'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#AnnaKolomoiska</uri></binding>  
  37. </result>  
  38. </results>  
  39. </sparql>  
  40. </cos:result>  

Example 2

To get list of creator's actions

File name:

AMO_ontology (3).rdfs, HomePage_AnnaKolomoiska (2).rdf, PageBy_AnnaKolomoiska (2).rdf, rule_about_access.rul

Query:

prefix amo: <http://sweetwiki.inria.fr/AMO_ontology.rdfs#>
select  ?res ?creator ?creatorAction where
{
?res amo:creator ?creator.
?creator amo:hasAuthorizedAction ?creatorAction
}

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 amo: <http://sweetwiki.inria.fr/AMO_ontology.rdfs#>  
  5. select list display xml ?res ?creator ?creatorAction   
  6. where  
  7. { ?res amo:creator ?creator . ?creator amo:hasAuthorizedAction ?creatorAction . }   
  8. ]]></cos:tquery>  
  9. <cos:info><![CDATA[ 
  10. 0.00 s for 3 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='res'/>  
  15. <variable name='creator'/>  
  16. <variable name='creatorAction'/>  
  17. </head>  
  18. <results ordered='false' distinct='false' >  
  19. <result>  
  20. <binding name='res'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#PageBy_AnnaKolomoiska</uri></binding>  
  21. <binding name='creator'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#AnnaKolomoiska</uri></binding>  
  22. <binding name='creatorAction'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#Read</uri></binding>  
  23. </result>  
  24. <result>  
  25. <binding name='res'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#PageBy_AnnaKolomoiska</uri></binding>  
  26. <binding name='creator'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#AnnaKolomoiska</uri></binding>  
  27. <binding name='creatorAction'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#DeleteContent</uri></binding>  
  28. </result>  
  29. <result>  
  30. <binding name='res'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#PageBy_AnnaKolomoiska</uri></binding>  
  31. <binding name='creator'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#AnnaKolomoiska</uri></binding>  
  32. <binding name='creatorAction'><uri>http://sweetwiki.inria.fr/AMO_ontology.rdfs#ModifyContent</uri></binding>  
  33. </result>  
  34. </results>  
  35. </sparql>  
  36. </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...