Sécurité d'une vue.

Forum destiné aux questions sur le développement : Formules, LotusScript, Java ...

Sécurité d'une vue.

Messagepar Jboss » 19 Jan 2004 à 12:17

Bonjour, J'ai créé un masque qui offre la possibilité de passé d'un mode "Public" à un mode "Privé".J'ai créé un role [PRIVE].J'ai créé une vue principale, qui affiche tout les documents (public et privé)J'aimerais maintenant, lorsque je clic sur un document marqué privé alors que je n'ai pas le role [PRIVE] qu'il ne se passe rien.Mais il faut pour autant que je puisse entrer dans les documents publics.Merci de votre aide.Jboss
Jboss
 

Re: Sécurité d'une vue.

Messagepar oguruma » 19 Jan 2004 à 14:02

Tu peux passer par le LS et coder tout ceci dans le QueryOpen. Tester la présence du rôle [PRIVE] et afficher un message d'erreur du genre "Vos droits sont insuffisants pour accèder à ce document"Si tu n'es pas l'aise en LS je peux te filer un peu de code pour réaliser tout ceci.Autre encore plus restrictive et pas de LS (si pas à l'aise) :Tu peux créer un champ de type Lecteur et tu le nommes par exemple AccesDoc. Celui-ci sera caché et calculé.Par défaut le document sera public.Tu crées un rôle PUBLIC, et PRIVEun bouton Rendre Public et un bouton Rendre PrivéFormule pour le bouton public : "[PUBLIC]"Formule pour le bouton privé "[PRIVE]"ensuite quand le doc est public : tu n'affiches que le bouton Privé et inversement quand le doc est privé tu affiche Public. Il suffit de tester le contenu du champ dans la formule caché pour tu caches public si AccesDoc="[PUBLIC]"tu caches privec si AccesDoc="[PRIVE]"c'est en fait un "toggle" les deux boutons sont sur la même ligne.enfin il suffit d'ajuter la LCAles utilisateur qui ont accès à tous les documents tu attribues PUBLIC+PRIVEceux qui ont accès uniquement aux publics tu attribues seulement PUBLIC et même principe pour ceux qui accèdent aux privésbien entendu l'administrateur doit avoir accès aux deux. (pendant le dév n'oublies pas de te donner accès aux deux) et ensuite tu jongles avec deux user de test afin de tester les droitcette methode offre l'avantage de ne montrer les documents dont tu as accès dans les vues.dans la vue tu affiches une colonne statut uniquement pour les personnes qui ont accès à tous les documents
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

tester un rôle

Messagepar oguruma » 19 Jan 2004 à 14:09

ci-dessous une fonction un peut "bestiale" qui permet de tester présence d'un rôle (à l'époque je n'ai pas trop cherché, j'ai fait au plus simple).Elle a au moins le mérite de fonctionner.Function PossedeRole (Role As String) As Integer Const Cmd ="@UserRoles" Dim EstRole As Integer Dim ListeRoles As Variant EstRole=False ListeRoles=Evaluate(Cmd) Forall R In ListeRoles If Ucase$(R)=Ucase$(Role) Then EstRole=True Exit Forall End If End Forall PossedeRole=EstRoleEnd Function
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

tester accès au document

Messagepar oguruma » 19 Jan 2004 à 14:14

un exemple d'accès au document ici, ce dernier refuse tous simplement le passage en mode EditSub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant) If PossedeRole("[5117]") And Source.EditMode=True Then Messagebox "Vous ne pouvez pas modifier le document, vous êtes uniquement autorisé à modifier le matricule",16,"Attention" End If End Subpour le faire sortir il faut mettre continue à false bon il tient compte du contexte de l'application... à transposer dans ton applila suite de ce développement chargé de bloquer le mode éditionSub Postopen(Source As Notesuidocument) If PossedeRole("[ADMINISTRATION]") Then If Source.IsnewDoc Then Source.Document.type="3" End If End If If PossedeRole("[SUPER]") Then If Source.IsnewDoc Then Source.Document.type="1" End If End If If PossedeRole("[5117]") And Source.EditMode=True Then Source.EditMode=False End IfEnd SubSub Querymodechange(Source As Notesuidocument, Continue As Variant) If PossedeRole("[5117]") And Source.EditMode=False Then Messagebox "Vous ne pouvez pas modifier le document, vous êtes uniquement autorisé à modifier le matricule",16,"Attention" Continue=False End IfEnd Sub
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

testet accès au doc - autre méthode

Messagepar oguruma » 19 Jan 2004 à 14:17

ci-dessous le source d'une application worflow que j'ai développé, voici comment tester les rôles et sortir si besoin.a adapter selon ton applije pense avoir été assez complet sur le sujet, y a plus qu'à...Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant) Dim doc As NotesDocument Dim modif As Variant Dim NN As NotesName Dim Item As NotesItem Set doc=source.document REM If PossedeRole("[Admin]") Then Exit Sub If Not IsNewDoc Then Set NN=New NotesName(Doc.Emetteur(0)) REM Si le document n'est pas validé, le lecteur n'a pas le droit de le consulter If PossedeRole("[Lecteur]") Then If Doc.VAL_MM(0)<>"OUI" Then Messagebox "La procédure n'est pas validée",16,"Sécurité - Lecture interdite" Continue=False Exit Sub End If End If REM On interdit la lecture aux anciennes procédures If PossedeRole("[Lecteur]") Then If Doc.EtatVersion(0)="Ancienne" Then Messagebox "Cette procédure n'est plus active ",16,"Sécurité - Lecture interdite" Continue=False Exit Sub End If End If REM Cas quand le rédacteur(stricte) consulte une ancienne dont il n'est pas l'auteur If PossedeRole("[Redacteur]") And Not PossedeRole("[Valideur]") And Not PossedeRole("[Responsable]") Then If Doc.EtatVersion(0)="Ancienne" Or Doc.EtatVersion(0)="Non Validé" Then If NN.Common<>Session.CommonUserName Then Messagebox "Vous n'êtes pas autorisé à lire document",16,"Sécurité - Lecture interdite" Continue=False Exit Sub End If End If End If REM Seul le rédacteur est autorisé à ouvrir le document quand celui-ci n'est pas envoyé If Session.CommonUserName<>NN.Common Then REM Si etat brouillon on refuse la lecture If Doc.Draft(0)="1" Then Messagebox "Le document est en cours de rédaction par " & NN.Common & ". La consultation est impossible",16,"Sécurité - Lecture interdite" Continue=False Exit Sub End If End If REM si la procédure est confidentielle, on refuse sa consulatation If Doc.VAL_MM(0)="OUI" And Doc.CONFIDENT(0)="3" Then Set Item=Doc.GetFirstItem("Auteurs") If Not (PossedeRole("[Admin]") Or PossedeRole("[Responsable]") Or PossedeRole("[Valideur]") Or Item.Contains(Session.CommonUserName)) Then Messagebox "Cette procédure possède un niveau de confidentialité élevé, vous n'êtes pas autorisé à la consulter",16,"Sécurité" Continue=False End If End If If Mode=1 Then REM Si le document n'est pas valide, pas de PB, l'acces en modif est gere par la LCA If Doc.VAL_MM(0)="NON" Then continue=True Else If Doc.EtatVersion(0)="Nouvelle" Then continue=False Messagebox "Vous ne pouvez pas modifier ce document car il est validé et en dernière version, vous devez créer une nouvelle version !",64,"Sécurité" Else Continue=False Messagebox "Vous ne pouvez pas modifier ce document car il est validé !" ,64,"Sécurité" End If End If End If End If End Sub
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

Re: Sécurité d'une vue.

Messagepar Jboss » 19 Jan 2004 à 15:57

Voila ce que j'ai fait : Creation des roles : OKCreation des boutons : OK J'ai alterné l'affichage.Creation du champs "AccesDoc "de type lecteur :OK Caché ok mais calculé, là j'ai mis [PUBLIC] par défaut.Donc a ce niveau la, si je clic sur le bouton PRIVE, le champs AccessDoc passe en : [PRIVE] et inversement.et c'est tout ?
Jboss
 

Re: Sécurité d'une vue.

Messagepar oguruma » 19 Jan 2004 à 16:04

ouiil faut tu règles la LCA un user qui a accès a tousun user pour les publicun user pour les privéil faut absolument que accesDoc soit de type Lecteur si tu as mis type Texte ça ne fonctionnera pas.en résumé voici la procédure à suite, il faut bien entendu l'adapté au contexte de ton appli que j'ignore... et ça marche ???en mode débug ne met les formules de cacher sur le champ accesDoc afin de vérifier sa bonne mise à jour...
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

Pb de script

Messagepar Jboss » 21 Jan 2004 à 18:15

Losrque je lance une Nouvelle creation a l'aide du masque (avec le debug)j'ai un OBJECT VARIABLE NOT SET au niveau du doc.Private"Private est un champs calculé vide a la creation puis 0 ou 1.Pourquoi ???Voici le script + la function Possederole...Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)'DECLARATION=========================================== Dim session As New notessession Dim db As notesdatabase Dim doc As notesdocument Dim ws As New notesuiworkspace Set db=session.currentdatabase Set doc=Source.document If PossedeRole("[PUBLIC]") And doc.Private(0) ="" Then Messagebox "Vous n'avez pas les droits nécessaires",16,"Sécu- Lecte" Continue=False Exit Sub End IfEnd SubSachant que le PossedeRole = Function PossedeRole (Role As String) As Integer Const Cmd ="@UserRoles" Dim EstRole As Integer Dim ListeRoles As Variant EstRole=False ListeRoles=Evaluate(Cmd) Forall R In ListeRoles If Ucase$(R)=Ucase$(Role) Then EstRole=True Exit Forall End If End Forall PossedeRole=EstRoleEnd Function
Jboss
 

Re: Pb de script

Messagepar Droad » 21 Jan 2004 à 20:16

Si c'est un nouveau document, c'est normal (dans ce cas Source.Document n'est pas encore instancié). Il faut encapsuler tes controles dans un 'if not IsnewDoc Then ...'[%sig%]
Droad
 

Re: tester accès au document

Messagepar Droad » 21 Jan 2004 à 20:21

... accessoirement, avec une LCA clean et des champs lecteurs/auteurs comme il faut, dans la plupart des cas on peut éviter toutes ces bidouilles LS et minimiser les risques de faille.[%sig%]
Droad
 

Re: Pb de script

Messagepar oguruma » 21 Jan 2004 à 21:38

Oui en effet au risque de répéter le debug de Droad. Regarde bien mes exemple je prends des précaution quand c'est un nouveau document.C'est une des différences entre le QueryOpen et PostOpen. Dans le dernier cas le document est instancié avec tous ses objets. Ce n'est pas le cas dans QueryOpen au moment d'un nouveau document. C'est pour cette raison que le booléen isNewDoc est prévu
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE

Re: Sécurité d'une vue.

Messagepar Raisin » 21 Jan 2004 à 23:27

Petite remarque: En version 5 ll n'y a pas de type booléen, et isnewdoc ne fait que retourner -1 pour TRUE et 0 pour FALSE.TRUE et FALSE ne sont que des constantes.En fait toute valeur différente de 0 est considérée comme vrai.En version 6, on a maintenant un type Boolean sur 2 bytes.C'était juste pour faire avancer le chimili, le chmilblick ;--)
Raisin
 

Script final

Messagepar Jboss » 22 Jan 2004 à 11:40

MERCI A Oguruma (qui j'espere trouver ce qu'il cherche)et a DROAD ainsi qu'a Raisin.Ca fonctionne !!!Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant) 'DECLARATION========================================================================= Dim session As New notessession Dim db As notesdatabase Dim doc As notesdocument Dim ws As New notesuiworkspace Set db=session.currentdatabase Set doc=Source.document If Not IsnewDoc Then If PossedeRole("[PUBLIC]") And doc.Private(0) ="Privé" Then Messagebox "Vous n'avez pas les droits nécessaires",16,"Sécurité - Lecture Interdite" Continue=False Exit Sub End If End IfEnd Sub++++Function PossedeRole (Role As String) As Integer Const Cmd ="@UserRoles" Dim EstRole As Integer Dim ListeRoles As Variant EstRole=False ListeRoles=Evaluate(Cmd) Forall R In ListeRoles If Ucase$(R)=Ucase$(Role) Then EstRole=True Exit Forall End If End Forall PossedeRole=EstRoleEnd Function
Jboss
 

Re: Script final

Messagepar oguruma » 22 Jan 2004 à 12:56

au moins ça c'est une bonne nouvelle
Bien à vous

http://www.dominoarea.org/oguruma/

Les téléphones PORTABLES dans les TGV y en a MARRRE de ces voyageurs qui ne respectent pas les autres ! ARRET DES PORTABLES SVP - Merci

Fumeurs ! respectez les non fumeurs !!!
Fumeurs ! respectez la loi de février 2007 et les lieux publics !!! (ie. hall de gares)
Avatar de l’utilisateur
oguruma
Super V.I.P.
Super V.I.P.
 
Message(s) : 4086
Inscrit(e) le : 16 Déc 2004 à 08:50
Localisation : LILLE


Retour vers Développement

cron