Page 1 sur 1

[Résolu] Gestion de groupe en ACL

MessagePublié: 01 Oct 2010 à 13:19
par poowie
Bonjour,

Dans l'évènement querymodechange, j'ai codé ce programme
Code : Tout sélectionner
        Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Dim entry As NotesACLEntry
   
   Set db = session.CurrentDatabase                     
   Set acl = db.ACL
   
   Set entry = acl.GetEntry( session.UserName)
   'Set entry = acl.GetEntry(session.UserGroupNameList)
   
   If Not ( source.EditMode ) Then
      currentStatus = source.FieldGetText( "Statut_1" )
      If ( currentStatus = "Clôturé" ) Or (currentStatus = "Annulé") Then
         Messagebox ( "Ticket clôturé ou annulé, toute modification est interdite ! " )
         continue = False
      Elseif ( entry.IsRoleEnabled( "Utilisateur" )) And ((currentStatus ="Fermé") Or (currentStatus = "En traitement"))Then
         Messagebox ( "Le ticket ne peut plus être modifié" )
         continue = False
         
      End If
   End If

   


il marche très bien quand le type d'utilisateur est une personne. dès que je modifie les LCA et je désigne un groupe de personne comme type d'utilisateur, je ne peux plus modifier le document.

j'ai cherché dans l'aide et trouver la formule isgroup et usernamelistgroup mais cela m'avance pas.
auriez vous une idée pour tester que l'entré est un groupe d'utilisateur??
merci d'avance.
Cordialement

MessagePublié: 01 Oct 2010 à 13:28
par Michael DELIQUE
salut

c'est normale, tu va chercher dans l'acl si l'utilisateur à le role, mais comme il n'est pas déclaré explicitement tu ne le trouve pas. vue que c'est un groupe qui a le role.

le plus simple et de passer par un evaluate et de tester en formule la ça marche

MessagePublié: 01 Oct 2010 à 13:45
par poowie
Michael DELIQUE a écrit:salut

c'est normale, tu va chercher dans l'acl si l'utilisateur à le role, mais comme il n'est pas déclaré explicitement tu ne le trouve pas. vue que c'est un groupe qui a le role.

le plus simple et de passer par un evaluate et de tester en formule la ça marche

Re,
je crois que j'ai résolu le problème, j'ai modifié le code comme suit:

Code : Tout sélectionner
Set ACLEntry=acl.GetFirstEntry
   While Not ACLEntry Is Nothing
      
      If ACLEntry.IsGroup  =True Or ACLEntry.IsPerson = True Then
         
         
         If Not ( source.EditMode ) Then
            currentStatus = source.FieldGetText( "Statut_1" )
            If ( currentStatus = "Clôturé" ) Or (currentStatus = "Annulé") Then
               Messagebox ( "Ticket clôturé ou annulé, toute modification est interdite ! " )
               continue = False
            Elseif ( ACLEntry.IsRoleEnabled( "Utilisateur" )) And ((currentStatus ="Fermé") Or (currentStatus = "En traitement"))Then
               Messagebox ( "Le ticket ne peut plus être modifié" )
               continue = False
               
            End If
         End If
      End If
      Set ACLEntry=acl.GetNextEntry(ACLEntry)
   Wend

   

j'arrive avec un groupe d'utilisateur à ouvrir le document en édition.

cordialement.

MessagePublié: 01 Oct 2010 à 14:40
par LSong
si tu veux savoir quel sont les roles d'une personne

@userRoles

est fait pour ca
la dans ton code si ca passe par des groupes c'est mort
hors la gestion par groupe est la plus efficasse quand tu as beaucoup de monde

MessagePublié: 01 Oct 2010 à 14:59
par poowie
LSong a écrit:si tu veux savoir quel sont les roles d'une personne

@userRoles

est fait pour ca
la dans ton code si ca passe par des groupes c'est mort
hors la gestion par groupe est la plus efficasse quand tu as beaucoup de monde

re,
Effectivement, c'étais une fausse joie, le code ne gère pas les groupe, je suis entrain de travailler la dessus en ce moment, je vais essayer avec le langage de formule. merci pour l'aide.
cordialement

MessagePublié: 01 Oct 2010 à 15:22
par LSong
n'esseye pas fait le tu n'as de toute facon pas le choix

si tu veux rester en scripte fait un champ multivalué calculer à l'affichage avec la formule @userRoles

tu auras la liste des roles de l'utilisateur courrant

par exemple
Code : Tout sélectionner
       dim item as NotesItem
       set item = source.document.getFirstItem ("Roles")
       If Not ( source.EditMode ) Then
            currentStatus = source.FieldGetText( "Statut_1" )
            If ( currentStatus = "Clôturé" ) Or (currentStatus = "Annulé") Then
               Messagebox ( "Ticket clôturé ou annulé, toute modification est interdite ! " )
               continue = False
            Elseif ( item.Contains ("[Utilisateur]")) And ((currentStatus ="Fermé") Or (currentStatus = "En traitement"))Then
               Messagebox ( "Le ticket ne peut plus être modifié" )
               continue = False
               
            End If
         End If

MessagePublié: 01 Oct 2010 à 15:31
par poowie
LSong a écrit:n'esseye pas fait le tu n'as de toute facon pas le choix

si tu veux rester en scripte fait un champ multivalué calculer à l'affichage avec la formule @userRoles

tu auras la liste des roles de l'utilisateur courrant

par exemple
Code : Tout sélectionner
       dim item as NotesItem
       set item = source.document.getFirstItem ("Roles")
       If Not ( source.EditMode ) Then
            currentStatus = source.FieldGetText( "Statut_1" )
            If ( currentStatus = "Clôturé" ) Or (currentStatus = "Annulé") Then
               Messagebox ( "Ticket clôturé ou annulé, toute modification est interdite ! " )
               continue = False
            Elseif ( item.Contains ("[Utilisateur]")) And ((currentStatus ="Fermé") Or (currentStatus = "En traitement"))Then
               Messagebox ( "Le ticket ne peut plus être modifié" )
               continue = False
               
            End If
         End If

re,
voila mon code en formula
Code : Tout sélectionner
@If(
@IsMember("[Utilisateur]" ; @UserRoles) & @IsDocBeingEdited &@Contains(Statut_1;"Fermé":"En traitement");
@Do(
@Prompt([Ok]; "Erreur"; "Vous n'êtes plus autorisé à modifier ce document!");
@PostedCommand( [EditDocument]; "0" )
);
@Success
)

je l'ai mis dans le querymodechange, mais pour l'instant les groupes avec le rôle utilisateur arrive comme même à modifier le document.

cdlt

cordialement.

MessagePublié: 01 Oct 2010 à 15:32
par Michael DELIQUE
salut

un tips qui pourrait t'aider => http://forum.dominoarea.org/userroles-en-ls-t12200.html

MessagePublié: 01 Oct 2010 à 15:49
par LSong
fait un prompt du @UserRoles voir ce qu'il y a dedans

MessagePublié: 04 Oct 2010 à 08:13
par poowie
Michael DELIQUE a écrit:salut

un tips qui pourrait t'aider => http://forum.dominoarea.org/userroles-en-ls-t12200.html

Bonjour,

Merci infinement pour le Tip, se fut un grand aide.
Le programme est modifié et marche très bien.

Cordialement.