logo Alfresco
Version Enterprise 3.4.2

Le besoin est de pouvoir gérer les permissions par utilisateur et/ou par groupe au niveau des espaces d’un site.

ex : je souhaite donner à l’utilisateur « user » (qui est Visiteur/Lecteur) le droit d’ajouter des documents (Contributeur) dans une branche du site uniquement.

Problème

La gestion des permissions proposée par défaut dans les sites permet de gérer uniquement les groupes de base.

Gestion des permissions par groupe d'utilisateurs uniquement
Gestion des permissions par groupe d’utilisateurs uniquement

Solution

L’idée est de récupérer la gestion de permission de l’entrepôt de données qui contrairement aux sites permet de gérer les permissions par utilisateur.

Gestion des permissions plus fine par utilisateurs et groupes d'utilisateurs
Gestion des permissions plus fine par utilisateurs et groupes d’utilisateurs

1. Actions

Dans un premier temps il faut modifier les différentes actions onActionManagePermissions d’un site pour les faire pointer vers la gestion des permissions de l’entrepôt:

Dans les fichiers
site-webscripts\org\alfresco\components\documentlibrary\documentlist.get.config.xml,
site-webscripts\org\alfresco\components\document-details\document-actions.get.config.xml et
site-webscripts\org\alfresco\components\folder-details\folder-actions.get.config.xml

remplacer la ligne:
<action type="action-link" id="onActionManagePermissions" permission="permissions" label="actions.document.manage-permissions" />
par la ligne suivante:
<action type="simple-link" id="onActionManagePermissions" permission="permissions" href="{managePermissionsUrl}" label="actions.document.manage-permissions" />

2. Groupes

Il faut maintenant afficher les groupes du site (qui ne sont pas gérés par défaut puisque la page est utilisée pour l’entrepôt)

C’est la page manage-permissions qui appelle le webscript authority-finder, c’est donc à cet endroit qu’il faut préciser le site courant.

Dans le fichier components\manage-permissions\manage-permissions.js ajouter le paramètre site dans dataObj :

// Load the Authority Finder component
Alfresco.util.Ajax.request(
{
  url: Alfresco.constants.URL_SERVICECONTEXT + "components/people-finder/authority-finder",
  dataObj:
  {
    site: Alfresco.constants.SITE,
    htmlid: this.id + "-authorityFinder"
  },
  successCallback:
  {
    fn: this.onAuthorityFinderLoaded,
    scope: this
  },
  failureMessage: this.msg("message.authorityFinderFail"),
  execScripts: true
});

Une fois le paramètre envoyé celui-ci est déjà pris en compte dans site-webscripts\org\alfresco\components\people-finder\authority-finder.get.html.ftl mais n’est pas envoyé au JavaScript authority-query. Il faut donc de nouveau préciser le site courant dans l’appel du script.

Dans le fichier components/people-finder/people-finder.js prendre en compte le siteId dans la création de l’url :

// DataSource definition
var searchUrl = YAHOO.lang.substitute(this.options.dataWebScript, this.options);
searchUrl += (searchUrl.indexOf("?") < 0) ? "?" : "&";
searchUrl += "authorityType=" + this.options.authorityType + "&";
searchUrl += "maxResults=" + this.options.maxSearchResults + "&";
if(this.options.siteId !== null && this.options.siteId !== ""){this.options. searchUrl += "siteId=" + this.options.siteId + "&";}

Enfin, dans le script de recherche il faut prendre en compte le siteId pour charger les bons groupes.

Modifier le fichier site-webscripts\org\alfresco\components\people-finder\authority-query.get.js  pour appeler le WebScript qui permet de récupérer les groupes du site courant :
if(args.siteId !== null && args.siteId !== "")
{
  var url = "/api/groups/site_" + args.siteId + "/children";
}
else
{
  var url = "/api/groups?shortNameFilter=" + encodeURIComponent(args.filter);
}
if (args.zone !== "all" && args.zone !== null)
{
  url += "&zone=" + encodeURIComponent(args.zone === null ? "APP.DEFAULT" : args.zone);
}

On peut maintenant gérér les permissions par utilisateurs et par groupes du sites
On peut maintenant gérér les permissions par utilisateurs et par groupes du sites

note: dans le script de recherche (le dernier de cet article), il serait possible d’afficher uniquement les utilisateurs du site en faisant des requêtes sur les utilisateurs de chaque groupe.

A vous de jouer!

Publicités