Bonjour à tous! :DJe crois que tout est dans le...

cancel
Showing results for 
Search instead for 
Did you mean: 
rivarola
Active Member

Re: Bonjour à tous! :DJe crois que tout est dans le...

Pour info, il faut être très prudent avec le replace="true" exposé plus haut car il remplace tout le bloc config et pas seulement l'action-group qu'on définit dedans.
Dans mon exemple plus haut il faudrait donc redéfinir toutes les actions de base (copy_node, cut_node, etc.) qui sont définies dans le bloc de config définissant le action-group id="document-browse" dans la configuration Alfresco native. Autant dire qu'il faut recopier plusieurs pages de XML… Pas top  Smiley Sad
pdubois
Active Member

Re: Bonjour à tous! :DJe crois que tout est dans le...

Bonjour,

Voici une autre proposition basée sur les évaluateurs de menu item.  En effet, la visibilité d’un item de menu peut être soumise aux droits mais aussi à un évaluateur. 

Exemple de code d’un évaluateur :

package org.alfresco.delegation.evaluator;

import javax.faces.context.FacesContext;

import org.alfresco.delegation.aspects.DelegIGRootAspect;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.web.action.ActionEvaluator;
import org.alfresco.web.bean.repository.Node;
import org.alfresco.web.bean.repository.Repository;




public class DirAccessEvaluator implements ActionEvaluator
{



    public boolean evaluate(Node node)
    {

        AuthenticationService auth = Repository.getServiceRegistry(
                FacesContext.getCurrentInstance()).getAuthenticationService();

        // don't do anything if it's root og an IG
        if (!node.hasAspect(DelegIGRootAspect.ASPECT_IGROOT))
        {
            return false;
        }

        if (auth.isCurrentUserTheSystemUser())
        {
            return false;
        }



        // check if LeaderCI
        PermissionService permService = Repository.getServiceRegistry(
                FacesContext.getCurrentInstance()).getPermissionService();
        if (permService.hasPermission(node.getNodeRef(), "DirAccess") == AccessStatus.ALLOWED &&
           permService.hasPermission(node.getNodeRef(), "DirManageMembers") != AccessStatus.ALLOWED    )
        {
            return true;
        }



        return false;
    }

}

Configuration de l’entrée de menu correspondant mise dans le web-client-config-custom.xml :

      <!– go to the page chowing users access profile no edition alowed –>
      <action id="access_dir">
        <evaluator>
         org.alfresco.delegation.evaluator.DirAccessEvaluator
        </evaluator>
        <label-id>access_dir</label-id>
        <image>/images/extension/icons/invite_deleg_users.gif</image>
        <action>dialog:manageDelegInvitedUsers</action>
        <action-listener>#{BrowseBean.setupSpaceAction}</action-listener>
        <params>
             <param name="id">#{actionContext.id}</param>
        </params>
      </action>
La technique que je suggère est d’utiliser les groupes et de montrer ou cacher l’item de menu en fonction de l’appartenance ou pas de l’utilisateur à un groupe.  Ceci donne plus de souplesse cas si un item est bridé comme décrit précédemment il est bridé pour tous les utilisateurs !!!  La technique des groupes permet également d’avoir une interface d’administration « gratuite » au travers l’administration des groupes et des utilisateurs.

J’espère que cela vous aide.
milona
Member II

Re: Bonjour à tous! :DJe crois que tout est dans le...

Bonjour,

Savez vous comment sont appelées les fonctions que ne sont pas dans un groupe d'actions ?

Par exemple je voudrais brider la fonction "ajouter un contenu", je ne trouve nulle part son appel.

Je vous remercie par avance de votre réponse.

Bien cordialement
rivarola
Active Member

Re: Bonjour à tous! :DJe crois que tout est dans le...

Tu es sûre qu'elle n'est pas dans un groupe d'actions ?
Il y a ça dans la config de base Alfresco :
         <!– Action for adding content - quick upload –>
         <action-group id="add_content_menu">
             <style>white-space:nowrap</style>
             <action idref="add_adm_content" />
         </action-group>
milona
Member II

Re: Bonjour à tous! :DJe crois que tout est dans le...

Bonjour,

Je te remercie de ta réponse. C'est sympa.
Pourrais-tu m'indiquer dans quel fichier tu as trouvé cela ? (car je ne trouve rien en recherchant dans mes fichiers).

Je te remercie d'avance de ta réponse.

bien cordialement
rivarola
Active Member

Re: Bonjour à tous! :DJe crois que tout est dans le...

web-client-config-actions.xml
milona
Member II

Re: Bonjour à tous! :DJe crois que tout est dans le...

Bonjour,

je te remercie de ta réponse,
avec mon alfresco community 2.1.0 je n'ai pas ces lignes là dans le fichier. :cry:

Bien cordialement
milona
Member II

Re: Bonjour à tous! :DJe crois que tout est dans le...

Bonjour,

Voila ce que j'ai dans ma version de Alfresco : browse.jsp
<nobr>
<r:permissionEvaluator value="#{NavigationBean.currentNode}" allow="CreateChildren" id="eval2">
<a:actionLink value="#{msg.add_content}" image="/images/icons/add.gif" padding="2" action="addContent" actionListener="#{AddContentDialog.start}" style="white-space:nowrap" id="link3" />
</r:permissionEvaluator>
</nobr>

l'action n'est dans aucun menu et semble être créé en live.
Je me demande si je suis obligée de supprimer ces lignes et de recréer moi même l'action et Cie qui n'a pas été ajoutée dans les fichiers de configuration.
ça me semble un peu passer la pelleteuse.

je vous remercie d'avance de votre réponse.

Bien cordialement
rivarola
Active Member

Re: Bonjour à tous! :DJe crois que tout est dans le...

Bonjour,

Je ne sais pas exactement sur quels critères tu veux brider cette action mais tu peux changer dans browse.jsp le paramétrage du <rSmiley TongueermissionEvaluator> ou alors mettre autour un tag <r:actionInstanceEvaluator> qui pourra afficher/masquer l'entrée de menu selon des critères custom. Il suffit alors de définir une classe implémentant l'interface ActionEvaluator dont tu spécifie le nom (paquetage inclus) dans le tag <r:actionInstanceEvaluator>.
Attention, bien penser à ajouter la classe custom d'evaluator dans le classpath Alfresco (JAR dans WEB-INF/lib par exemple).
milona
Member II

Re: Bonjour à tous! :DJe crois que tout est dans le...

Merci tu es trop fort !
Je ne connaissais pas ce tag !!

Je suis en train de tester ça.

Un petit lien pour ceux que ça intéresse :
http://dev.alfresco.com/resource/docs/taglib/web-client/r/actionInstanceEvaluator.html

A bientot