cancel
Showing results for 
Search instead for 
Did you mean: 

gestion des permissions

latige
Champ in-the-making
Champ in-the-making
bonjour,

je voudrai qu'un groupe d'utilisateur A puisse avoir les permissions Read dans un espace parents X  et une permission collaborateur un espace fils Y.ces  deux espace font parties d'un même modèle d'espace.

je sais qu'il est possible de le faire une fois l'espace créer avec gérer les utilisateur invités cependant je voudrai que ce soit fait automatiquement quand on utilise le modèle d'espace.c

Pour le moment mon groupe d'utilisateur A possède les permissions read sur tous les espaces fils de X et je n'arrive pas a lui attribuer les permissions collaborateur sur le sous espace Y

merci d'avance pour toute aide possible pour me faire avancer
6 REPLIES 6

rivarola
Champ on-the-rise
Champ on-the-rise
Bonjour,

Je n'ai jamais fait le test mais est-ce qu'il ne serait pas possible d'inviter des utilisateur dans le template d'espace afin que chacune de ses instanciations bénéficie de ces permissions ?

latige
Champ in-the-making
Champ in-the-making
Bonjour,

merci beaucoup

j'ai déjà testé cette possibilité en décochant l'héritage des permissions des droits parents mais cela n'a pas d'effet mon groupe d'utilisateur A garde uniquement les permission Read dans mon sous espace.

donc mon interrogation reste entière

huberd
Champ in-the-making
Champ in-the-making
Bonjour,

en ce qui me concerne, je n'utilise pas les espaces. J'ai créé une classe java que j'ai associé à une règle qui est appliquée à ma racine. Lorsque je créé un répertoire vide dans cette racine, la règle me créé automatiquement l'arborescence compète avec les droits correspondants aux différents répertoire qui compose cette arborescence, j'applique même des icônes à certains répertoire, et j'arrive même à appliquer des règles. Les groupes associés aux différents répertoires sont calculés automatiquement par la règle et ce en fonction de la description de mon arborescence complète (Exemple, pour l'arborescence suivante "EU - Group/DSI - Management des Systèmes d'information/DOC - Documents/Drafts", le groupe calculé sera EU-DSI-COLLABORATORS pour le répertoire Drafts, et EU-DSI-CONSUMERS pour le répertoire Review and Approval. Si cela vous intéresse, je peux vous mettre mon code source en ligne pour la communauté.

latige
Champ in-the-making
Champ in-the-making
Bonjour,

Merci beaucoup cela semble très inintéressant et pourrait en effet régler mon petit soucis.
Oui cela m'intéresse grandement  et si vous pouviez mettre votre code source en ligne pour la communauté, je pourrai m'en inspirer.

encore merci je vous tiendrez au courant de l'évolution de votre solution

huberd
Champ in-the-making
Champ in-the-making
Pour ceux que cela interesserait, voici les sources de mon système de création d'arborescence modulaire.

Pour commencer j'ai une racine qui porte le nom de mon Entreprise sur laquelle j'applique une régle de création de racine de filliale.
Cette règle devra être appliquée manuellement sur cette racine.

Le bean associé à la règle devra être défini comme suit dans le fichier de configuration custom-model-context.xml
    <!–*********************************–>
    <!–*     Createur de filliale      *–>
    <!–*********************************–>
    <bean id="community-make-subsidiary-space" class="org.alfresco.community.repo.MakeSubsidiarySpace" parent="action-executer" >
       <property name="nodeService">
          <ref bean="nodeService" />
       </property>
       <property name="ruleService">
          <ref bean="RuleService" />
       </property>
       <property name="actionService">
          <ref bean="ActionService" />
       </property>
    </bean>

    <bean id="community-make-subsidiary-space-action-messages" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
      <property name="resourceBundles">
        <list>
          <value>alfresco/messages/action-executer/community-make-subsidiary-space-action-messages</value>
        </list>
      </property>
    </bean>

community-make-subsidiary-space-action-messages
community-make-subsidiary-space.title=Créateur d'espace de filliale
community-make-subsidiary-space.description=Initialise la création de l'espace de filliale

MakeSubsidiarySpace.java
package org.alfresco.community.repo;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionService;
import org.alfresco.service.cmr.action.CompositeAction;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.rule.Rule;
import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.community.util.MyLogger;

public class MakeSubsidiarySpace  extends ActionExecuterAbstractBase{
   //private static Log logger = LogFactory.getLog("MakeSubsidiarySpace");
   
   // Add Bean Property on custom-model-context.xml fil on alfresco\extension directory
   private NodeService nodeService;
   private ActionService actionService;
   private RuleService ruleService;
   
   public final static String PARAM_EXECUTE_INHERITED_RULES = "execute-inherited-rules";

   public void setNodeService(NodeService nodeService)
   {
      this.nodeService = nodeService;
   }
   
   public void setActionService(ActionService actionService)
   {
      this.actionService = actionService;
   }
   
   public void setRuleService(RuleService ruleService)
   {
      this.ruleService = ruleService;
   }
   
   protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
   {
      MyLogger.debugln("org.alfresco.community.repo.MakeSubsidiarySpace (Start)…",1);
      if (this.nodeService.exists(actionedUponNodeRef) == true)
      {
         MyLogger.debugln("Add rule Processus Space Creator (In)",1);
         createRules(actionService, ruleService, actionedUponNodeRef);
      }
      MyLogger.debugln("org.alfresco.community.repo.MakeSubsidiarySpace (End).",1);
      MyLogger.debugln("",1);
   }
   
   protected static void createRules(ActionService actionService, RuleService ruleService, NodeRef nodeRef) {
      Rule rule = new Rule();
       rule.setRuleType("inbound");

       // setup the rule and add it to the space
       rule.setTitle("Processus Space Creator (In)");
       rule.setDescription("Make Processus Space");
       rule.applyToChildren(false);
       rule.setExecuteAsynchronously(false);
       rule.setRuleDisabled(false);

       CompositeAction compositeAction = actionService.createCompositeAction();
       rule.setAction(compositeAction);
      
       compositeAction.addAction(actionService.createAction("community-make-processus-space"));
       //compositeAction.addActionCondition(actionService.createActionCondition("no-condition"));
       Map<String,Serializable> actionMap = new HashMap<String, Serializable>();
       actionMap.put("type", ContentModel.TYPE_FOLDER);
       compositeAction.addActionCondition(actionService.createActionCondition("is-subtype",actionMap));
       ruleService.saveRule(nodeRef, rule);
   }
   
   @Override
   protected void addParameterDefinitions(List<ParameterDefinition> paramList) {
      // No code
   }
}

Cette première règle permet lorsque je créé un espace filliale dans l'espace racine de l'Entreprise, d'appliquer automatiquement une règle de création de sous dossier à ses espace de filliale. Ensuite dans ces espaces de filliales je peux aisement créer manuellement des espace de processus lié à la filliale. La création de processus dans les espaces filliales déclenchera alors la création automatique des sous dossiers associés au processus, à savoir les type de documents pouvant être rédigés au sein du processus, ainsi que les différentes phases d'approbation au sein du type de document.

Maintenant que nous avons créé notre espace de filliale, interessons nous à la création d'espace de processus.
Comme énoncé précédemment la création d'espace de processus est manuelle. La création d'un espace de processus déclenche une règle de création de l'arborescence lié au processus, à savoir les type de document et les espace de validations associé à ces types de document.

Le bean associé à la règle Processus Space Creator (In) devra être défini comme suit dans le fichier de configuration custom-model-context.xml
    <!–*********************************–>
    <!–*    Createur d'arborescence    *–>
    <!–*********************************–>
    <bean id="community-make-processus-space" class="org.alfresco.community.repo.MakeProcessusSpace" parent="action-executer" >
       <property name="nodeService">
          <ref bean="nodeService" />
       </property>
       <property name="fileFolderService">
          <ref bean="FileFolderService" />
       </property>
       <property name="ruleService">
          <ref bean="RuleService" />
       </property>
       <property name="actionService">
          <ref bean="ActionService" />
       </property>
    </bean>

    <bean id="community-make-processus-space-action-messages" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
      <property name="resourceBundles">
        <list>
          <value>alfresco/messages/action-executer/community-make-processus-space-action-messages</value>
        </list>
      </property>
    </bean>

community-make-processus-space-action-messages_fr_FR.properties
community-make-processus-space.title=Créateur d'espace de processus
community-make-processus-space.description=Initialise la création de l'espace processus

MakeProcessusSpace.java
package org.alfresco.community.repo;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionService;
import org.alfresco.service.cmr.action.CompositeAction;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.rule.Rule;
import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.community.definitions.CommunityConstante;
import org.alfresco.community.util.MyLogger;

public class MakeProcessusSpace  extends ActionExecuterAbstractBase{
   //private static Log logger = LogFactory.getLog("MakeProcessusSpace");
   
   // Add Bean Property on custom-model-context.xml fil on alfresco\extension directory
   private NodeService nodeService;
   @SuppressWarnings("unused")
   private FileFolderService fileFolderService;
   private ActionService actionService;
   private RuleService ruleService;
   
   public final static String PARAM_EXECUTE_INHERITED_RULES = "execute-inherited-rules";

   public void setNodeService(NodeService nodeService)
   {
      this.nodeService = nodeService;
   }
   
   public void setFileFolderService(FileFolderService fileFolderService)
   {
      this.fileFolderService = fileFolderService;
   }
   
   public void setActionService(ActionService actionService)
   {
      this.actionService = actionService;
   }
   
   public void setRuleService(RuleService ruleService)
   {
      this.ruleService = ruleService;
   }
   
   protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
   {
      MyLogger.debugln("org.alfresco.community.repo.MakeProcessusSpace (Start)…",1);
      if (this.nodeService.exists(actionedUponNodeRef) == true)
      {
         MyLogger.debugln("Add rule Validation Sub-Space Creator (In)",1);
         createRules(actionService, ruleService, actionedUponNodeRef);
         MyLogger.debugln("->" + CommunityConstante.SPACE_DOC,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_DOC, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("->" + CommunityConstante.SPACE_EDC,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_EDC, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("->" + CommunityConstante.SPACE_FOR,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_FOR, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("->" + CommunityConstante.SPACE_IOP,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_IOP, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("->" + CommunityConstante.SPACE_PCS,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_PCS, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("->" + CommunityConstante.SPACE_PRO,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_PRO, ContentModel.TYPE_FOLDER);
      }
      MyLogger.debugln("org.alfresco.community.repo.MakeProcessusSpace (End).",1);
      MyLogger.debugln("",1);
   }
   
   protected static void createRules(ActionService actionService, RuleService ruleService, NodeRef nodeRef) {
      Rule rule = new Rule();
       rule.setRuleType("inbound");

       // setup the rule and add it to the space
       rule.setTitle("Validation Sub-Space Creator (In)");
       rule.setDescription("Make all validation Sub-Space");
       rule.applyToChildren(false);
       rule.setExecuteAsynchronously(false);
       rule.setRuleDisabled(false);

       CompositeAction compositeAction = actionService.createCompositeAction();
       rule.setAction(compositeAction);
      
       compositeAction.addAction(actionService.createAction("community-make-validation-subspaces"));
       //compositeAction.addActionCondition(actionService.createActionCondition("no-condition"));
       Map<String,Serializable> actionMap = new HashMap<String, Serializable>();
       actionMap.put("type", ContentModel.TYPE_FOLDER);
       compositeAction.addActionCondition(actionService.createActionCondition("is-subtype",actionMap));
       ruleService.saveRule(nodeRef, rule);
   }
   
   @Override
   protected void addParameterDefinitions(List<ParameterDefinition> paramList) {
      // No code
   }
}

Lors de la création d'un espace processus dans un espace filliale, la règle appliquée à l'espace filliale applique une règle de création type de document au nouvel espace processus créé et créé ensuite une serie d'espace de type de document. Ces espace type de document seront alors pris en charge par la règle appliqué au nouvel espace processus créé. L'avantage de ce type de fonctionnement, c'est que vous pouvez ajouter des espaces type de document supplémentaires manuellement en plus des espaces créés par defaut.

Le bean associé à la règle Validation Sub-Space Creator (In) devra être défini comme suit dans le fichier de configuration custom-model-context.xml
    <!–*********************************–>
    <!–* Createur de sous arborescence *–>
    <!–*********************************–>
    <bean id="community-make-validation-subspaces" class="org.alfresco.community.repo.MakeValidationSubSpaces" parent="action-executer" >
       <property name="nodeService">
          <ref bean="nodeService" />
       </property>
       <property name="permissionService">
          <ref bean="permissionService" />
       </property>
       <property name="fileFolderService">
          <ref bean="FileFolderService" />
       </property>
       <property name="ruleService">
          <ref bean="RuleService" />
       </property>
       <property name="actionService">
          <ref bean="ActionService" />
       </property>
    </bean>

    <bean id="community-make-validation-subspaces-action-messages" class="org.alfresco.i18n.ResourceBundleBootstrapComponent">
      <property name="resourceBundles">
        <list>
          <value>alfresco/messages/action-executer/community-make-validation-subspaces-action-messages</value>
        </list>
      </property>
    </bean>

community-make-validation-subspaces-action-messages_fr_FR.properties
community-make-validation-subspaces.title=Créateur de sous espace de validation
community-make-validation-subspaces.description=Créé les sous-espaces de validation

MakeValidationSubSpaces.java
package org.alfresco.community.repo;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.alfresco.model.ApplicationModel;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.action.executer.ActionExecuterAbstractBase;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionService;
import org.alfresco.service.cmr.action.CompositeAction;
import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.rule.Rule;
import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.community.definitions.CommunityConstante;
import org.alfresco.community.service.cmr.security.CommunityPermissionService;
import org.alfresco.community.util.MyLogger;

public class MakeValidationSubSpaces  extends ActionExecuterAbstractBase{
   //private static Log logger = LogFactory.getLog("MakeValidationSubSpaces");
   
   // Add Bean Property on custom-model-context.xml fil on alfresco\extension directory
   private NodeService nodeService;
   private PermissionService permissionService;
   private FileFolderService fileFolderService;
   private ActionService actionService;
   private RuleService ruleService;

   public void setNodeService(NodeService nodeService)
   {
      this.nodeService = nodeService;
   }
   
   public void setFileFolderService(FileFolderService fileFolderService)
   {
      this.fileFolderService = fileFolderService;
   }
   
   public void setActionService(ActionService actionService)
   {
      this.actionService = actionService;
   }
   
   public void setRuleService(RuleService ruleService)
   {
      this.ruleService = ruleService;
   }
   
   public void setPermissionService(PermissionService permissionService)
   {
      this.permissionService = permissionService;
   }
   
   protected void executeImpl(Action action, NodeRef actionedUponNodeRef)
   {
      MyLogger.debugln("org.alfresco.community.repo.MakeValidationSubSpaces (Start)…",1);
      if (this.nodeService.exists(actionedUponNodeRef) == true) {   
         MyLogger.debugln("  ->" + CommunityConstante.SPACE_DRAFTS,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_DRAFTS, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("  ->" + CommunityConstante.SPACE_REVIEW_AND_APPROVAL,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_REVIEW_AND_APPROVAL, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("  ->" + CommunityConstante.SPACE_PUBLISHED,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_PUBLISHED, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("  ->" + CommunityConstante.SPACE_APPROVED,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_APPROVED, ContentModel.TYPE_FOLDER);
         MyLogger.debugln("  ->" + CommunityConstante.SPACE_TEMPLATES,1);
         this.fileFolderService.create(actionedUponNodeRef, CommunityConstante.SPACE_TEMPLATES, ContentModel.TYPE_FOLDER);
                        
         List<ChildAssociationRef> childrenRefs = nodeService.getChildAssocs(actionedUponNodeRef);
         for (ChildAssociationRef tchildrenRef : childrenRefs) {
            final NodeRef childrenRef = tchildrenRef.getChildRef();
            String nodeName = (String)this.nodeService.getProperty(childrenRef, ContentModel.PROP_NAME);

            if (nodeName.equals(CommunityConstante.SPACE_DRAFTS)) {
               // Add icon
               MyLogger.debugln("    -> Add icon",1);
               nodeService.setProperty(childrenRef, ApplicationModel.PROP_ICON, CommunityConstante.ICON_DRAFTS_SPACE);
               
               // Set default permissions
               MyLogger.debugln("    -> Set permission",1);
               permissionService.setInheritParentPermissions(childrenRef, false);
               permissionService.setPermission(childrenRef, getGroupName(nodeService,actionedUponNodeRef), CommunityPermissionService.COLLABORATOR,true);
               
               // Add rule
               MyLogger.debugln("    -> Add rule Document Preparator (In)",1);
               createRules(actionService, ruleService, childrenRef);
            }

            if (nodeName.equals(CommunityConstante.SPACE_REVIEW_AND_APPROVAL)) {
               // Add icon
               MyLogger.debugln("    -> Add icon",1);
               nodeService.setProperty(childrenRef, ApplicationModel.PROP_ICON, CommunityConstante.ICON_REVIEW_AND_APPROVAL_SPACE);
            }

            if (nodeName.equals(CommunityConstante.SPACE_APPROVED)) {
               // Add icon
               MyLogger.debugln("    -> Add icon",1);
               nodeService.setProperty(childrenRef, ApplicationModel.PROP_ICON, CommunityConstante.ICON_APPROVED_SPACE);
               
               // Set default permissions
               MyLogger.debugln("    -> Set permission",1);
               permissionService.setInheritParentPermissions(childrenRef, false);
               this.permissionService.setPermission(childrenRef, getGroupName(nodeService,actionedUponNodeRef), PermissionService.CONSUMER,true);
            }
               
            if (nodeName.equals(CommunityConstante.SPACE_PUBLISHED)) {
               // Add icon
               MyLogger.debugln("    -> Add icon",1);
               nodeService.setProperty(childrenRef, ApplicationModel.PROP_ICON, CommunityConstante.ICON_PUBLISHED_SPACE);
            }
               
            if (nodeName.equals(CommunityConstante.SPACE_TEMPLATES)) {
               // Add icon
               MyLogger.debugln("    -> Add icon",1);
               nodeService.setProperty(childrenRef, ApplicationModel.PROP_ICON, CommunityConstante.ICON_TEMPLATES_SPACE);
            }
         }
      }
      MyLogger.debugln("org.alfresco.community.repo.MakeValidationSubSpaces (End).",1);
      MyLogger.debugln("",1);
   }
   
   protected String getGroupName(NodeService nodeService,NodeRef nodeRef) {
      String path = this.nodeService.getPath(nodeRef).toDisplayPath(this.nodeService);
      path = path.replace(CommunityConstante.SPACECHAR," ");
      String[] Valeurs = path.split("/");
      String groupName = CommunityConstante.GROUP_BASE + Valeurs[3].substring(0, 2) + "-" + Valeurs[4].substring(0, 3) + "-" + CommunityConstante.GROUP_COLLABORATORS;
      MyLogger.debugln("      -> to " + groupName,1);
      return groupName;
   }
   
   protected static void createRules(ActionService actionService, RuleService ruleService, NodeRef nodeRef) {
      Rule rule = new Rule();
       rule.setRuleType("inbound");

       // setup the rule and add it to the space
       rule.setTitle("Document Preparator (In)");
       rule.setDescription("Prepare new document imported in repository");
       rule.applyToChildren(true);
       rule.setExecuteAsynchronously(false);
       rule.setRuleDisabled(false);

       CompositeAction compositeAction = actionService.createCompositeAction();
       rule.setAction(compositeAction);
      
       compositeAction.addAction(actionService.createAction("community-prepare-document"));
       //compositeAction.addActionCondition(actionService.createActionCondition("no-condition"));
       Map<String,Serializable> actionMap = new HashMap<String, Serializable>();
       actionMap.put("type", ContentModel.TYPE_CONTENT);
       compositeAction.addActionCondition(actionService.createActionCondition("is-subtype",actionMap));
       ruleService.saveRule(nodeRef, rule);
   }
   
   @Override
   protected void addParameterDefinitions(List<ParameterDefinition> paramList) {
      // No code
   }
}

Voili, voilou, en espérant avoir été clair dans mes explications.

latige
Champ in-the-making
Champ in-the-making
Bonjour,

j'avais un peu laissé ça de coté je m'y suis remis et grâce a l'exemple de tes class j'ai réussie

Merci beaucoup pour cette aide