cancel
Showing results for 
Search instead for 
Did you mean: 

contrôle des droits au niveau document

vaquero
Champ in-the-making
Champ in-the-making
Bonjour,

sur un dossier ou j'ai le droit "lecteur", je réalise des modifications sur un fichier en utilisant la fonction RunAs Admin.

le fichier obtenu est accessible en en mode écriture et je souhaite limiter l'accès au fichier en mode READ Only

j'ai utilisé les deux lignes de code mais pour l'instant ça ne fonctionne pas :


permissionService.setInheritParentPermissions(fichierTrouve, false);         
//permissionService.setPermission(fichierTrouve, "GROUP_VALIDATEUR", PermissionService.CONSUMER, true);
permissionService.setPermission(fichierTrouve, "GROUP_VALIDATEUR", PermissionService.READ_CONTENT, true);


Merci à vous,
bien cordialement,

alfresco 3.4.e sous XP
3 REPLIES 3

rguinot
Confirmed Champ
Confirmed Champ
Avez vous pensé à l'héritage des droits ?  votre "fichierTrouve" hérite sans doute de permissions supplémentaires venant de l'arborescence du dessus.

vaquero
Champ in-the-making
Champ in-the-making
Bonjour rguinot,

Il y a deux dossiers Envoi et Reception.
les roles sur ces deux dossiers sont les suivants:

  * Envoi : groupe VALIDATEUR -> contributeur
                admin -> coodinateur
héritage espace parent décoché
  * Reception: groupe VALIDATEUR -> lecteur
                admin -> coodinateur
héritage espace parent décoché
lorsqu'un validateur xxx ajoute un fichier dans le dossier Envoi l'action suivante se déclenche:



public class MoveAdminActionExecuter extends ActionExecuterAbstractBase
{
public static final String NAME = "move-admin";
public static final String PARAM_DESTINATION_FOLDER = "destination-folder";
private PermissionService permissionService;
private NodeService nodeService;
private FileFolderService fileFolderService;
private Logger logger = Logger.getLogger(MoveAdminActionExecuter.class);
private NodeRef fichierTrouve;
private NodeRef destinationParent;


/**
* PermissionService service
**/
public void setPermissionService(PermissionService permissionService) {
    this.permissionService = permissionService;
}
/**
* Node service
**/
public void setNodeService ( NodeService nodeService){
   this.nodeService = nodeService;
}
/**
* FileFolder service
**/

public void setFileFolderService(FileFolderService fileFolderService)
{
   this.fileFolderService = fileFolderService;
}



   @Override
protected void addParameterDefinitions(List<ParameterDefinition> paramList)
{
      paramList.add(new ParameterDefinitionImpl(PARAM_DESTINATION_FOLDER,
                       DataTypeDefinition.NODE_REF,
                       true,
                       getParamDisplayLabel(PARAM_DESTINATION_FOLDER)));
}




@Override

protected void executeImpl(Action MonAction, final NodeRef actionedUponNodeRef)
{
   
final String NomDuFichier= (String)nodeService.getProperty(actionedUponNodeRef,ContentModel.PROP_NAME);
destinationParent = (NodeRef)MonAction.getParameterValue(PARAM_DESTINATION_FOLDER);
fichierTrouve= null;
logger.info("le nom de l'utilisateur: "+ AuthenticationUtil.getSystemUserName());

AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Void>()
{

public Void doWork() throws Exception
{

AuthenticationUtil.runAs(new AuthenticationUtil.RunAsWork<Void>()
{

public Void doWork() throws Exception
{

try
   {
       fileFolderService.move(actionedUponNodeRef, destinationParent, null);
   }
catch (FileNotFoundException e)
   {
       // Do nothing
   }

List<FileInfo> listFichierEtDossier = fileFolderService.list(destinationParent);

for( FileInfo fichierOuDossier : listFichierEtDossier)
{
   if(!(fichierOuDossier.isFolder())&&!(fichierOuDossier.isLink()))
   {

      String NomDuFichierCourant=(String) nodeService.getProperty(fichierOuDossier.getNodeRef(),ContentModel.PROP_NAME);
         if(NomDuFichierCourant.equals(NomDuFichier))
         {
            logger.info("fichier trouve");
            fichierTrouve =  fichierOuDossier.getNodeRef();
             permissionService.setPermission(fichierTrouve, "GROUP_VALIDATEUR", PermissionService.WRITE,false);
             permissionService.setPermission(fichierTrouve, "GROUP_VALIDATEUR", PermissionService.READ,true);
            
            logger.info("permission validateur");
             Set<AccessPermission> permission = permissionService.getAllSetPermissions(fichierTrouve);
            Iterator<AccessPermission> itr = permission.iterator();
            while(itr.hasNext())
            {
                logger.info("permission getAllSetPermissions(fichierTrouve) : "+ itr.next());            
            }
         
            
         }
   }
}

   return null;
      
   }
   }, "admin");

return null;

}
},AuthenticationUtil.getSystemUserName() );

Set<AccessPermission> permission2 = permissionService.getPermissions(fichierTrouve);
Iterator<AccessPermission> itr2 = permission2.iterator();
while(itr2.hasNext())
{
    logger.info("permission getPermission(fichierTrouve) : "+ itr2.next());
   
}
}
}


au niveau du log j'obtiens :


permission getAllSetPermissions(fichierTrouve) : ALLOWED Read - GROUP_VALIDATEUR (GROUP)
permission getAllSetPermissions(fichierTrouve) : ALLOWED Coordinator - GROUP_ALFRESCO_ADMINISTRATORS (GROUP)
permission getAllSetPermissions(fichierTrouve) : ALLOWED Consumer - GROUP_VALIDATEUR (GROUP)
permission getAllSetPermissions(fichierTrouve) : DENIED Write - GROUP_VALIDATEUR (GROUP)


permission getPermission(fichierTrouve) : ALLOWED Coordinator - xxx (USER)
permission getPermission(fichierTrouve) : ALLOWED Consumer - xxx (USER)
permission getPermission(fichierTrouve) : ALLOWED Contributor - xxx (USER)
permission getPermission(fichierTrouve) : ALLOWED Collaborator - xxx (USER)
permission getPermission(fichierTrouve) : ALLOWED Editor - xxx (USER)


le validateur xxx a tous les droits (admin) sur le fichier transféré me^me s'il a le role de  lecteur sur le dossier.

Il faut que le fichier transféré soit en mode lecture uniquement !!!

merci

bien cordialement

vaquero
Champ in-the-making
Champ in-the-making
bonjour,

j'ai utilisé ces  lignes dans mon code java:

permissionService.setInheritParentPermissions(fichierTrouve, false);
permissionService.deletePermission(fichierTrouve, "GROUP_VALIDATEUR", PermissionService.EDITOR);
permissionService.deletePermission(fichierTrouve, "GROUP_VALIDATEUR", PermissionService.CONTRIBUTOR);
permissionService.deletePermission(fichierTrouve, "GROUP_VALIDATEUR", PermissionService.COORDINATOR);   

le programme s'exécute sans erreur au niveau des log mais il n y'a aucun changement des droits sur le document.
il reste en mode lecture et écriture même si je suis qu'un lecteur sur le dossier!!

y a t-il un moyen de modifier les droits au fichier après l’utilisation du RunAs admin???!!

merci a vous