Bonjour,
Suite à l'aide de yannick Boyer, j'arrive bien à tester l'affichage des champs
d'un layout en fonction de rôles ; le code TAL a indiquer dans le champ "Hide
the widget if the given TAL expression returns true" (portal_layout/champ a
afficher ou non) est du type :
python: 'X' not in user.getRolesInContext(context) ou 'X' est un role.
Si le user a le role 'X' le champ s'affiche bien.(l'expression renvoie
'False', et le champ n'est donc pas caché).
J'ai ete plus loin, et j'ai permis l'affichage de champs, à quatre roles,
sachant qu'un utilisateur peut avoir 0,un,deux,trois, ou quatre de ces rôles.
J'ai pas mal galéré (je ne connais pas Python) avant d'arriver à trouver le
bout de code qui fonctionne (même si c'est simplissime mais bon...) :
python: 'Rolex1' not in user.getRolesInContext(context) and
'Rolex2' not in user.getRolesInContext(context) and
'Rolex3' not in user.getRolesInContext(context) and
'Rolex4' not in user.getRolesInContext(context)
1) Mais pouvez-vous me dire s'il existe une expression Python plus simple que
celle que j'ai trouvée ?
Du type :
('Rolex1','Rolex2','Rolex3','Rolex4') not in user.getRolesInContext(context)
ou du type :
('Rolex1' and 'Rolex2' and 'Rolex3' and 'Rolex4') not in
user.getRolesInContext(context)
Je ne suis pas arrivé à la trouver.
2) Afin d'eviter de lister les differents roles, je pourrais egalement
rechercher la presence non pas de roles, mais d'une sous-chaine de caracteres :
comment alors coder l'expression ? (Dans le cas ci-dessus : tester la presence
de la Chaine('Rolex') dans la liste des roles du user). Comment coder cette
expression : Chaine('Rolex') not in user.getRolesInContext(context) ?
3) Existe t-il une doc sur les fonctions écrites en Python et utilisables ?
Comment savoir par exemple que la fonction getRolesInContext(context) peut être
employée et qu'elle a telle finalité ?
D'avance merci de votre aide,
Cordialement,
-------- Message d'origine--------
De: Piton Marco
Date: mar. 21/06/2005 15:12
À: Yannick BOYER; [email protected]
Cc: [EMAIL PROTECTED]
Objet: RE : RE : [CPS-users-fr] Ne pas afficher un champ d'un Schema
Yannick,
En effet je viens de tester le code que tu m'as fourni. Ca marche au poil :
grand grand merci.
Je mets Florent Guillaume qui m'a repondu egalement, en double
Cordialement,
Marco.
-------- Message d'origine--------
De: Yannick BOYER [mailto:[EMAIL PROTECTED]
Date: mar. 21/06/2005 14:33
À: Piton Marco; [email protected]
Cc:
Objet: RE : [CPS-users-fr] Ne pas afficher un champ d'un Schema
Dans portal_layout dans le widget que vous voulez caché il y a un champ:
Hide the widget if the given TAL expression returns true
Moi j'ai rajouté un code du type : python: 'WorkspaceManager' not in
user.getRolesInContext(context)
-----Message d'origine-----
De : Piton Marco [mailto:[EMAIL PROTECTED]
Envoyé : mardi 21 juin 2005 16:27
À : [email protected]
Objet : [CPS-users-fr] Ne pas afficher un champ d'un Schema
Bonjour,
Comment faire pour NE PAS afficher un champ defini dans un document, en
fonction d'un rôle particulier ?
J'ai indiqué le rôle concerné dans les zones "ACL: read roles" et "ACL:
write roles" du field dans Portal_schemas (Le field s'appelle "Prenom" dans la
trace ci-dessous).
A priori les autorisations sont bien testées, mais au lieu de ne pas afficher
le champ, il y a plantage :
Time 2005/06/21 14:22:27.203 GMT+2
User Name (User Id) mPiton (mPiton)
Request URL http://localhost:8080/cps/workspaces/ss/qs/view
Exception Type ReadAccessError
Exception Value Read access to Prenom denied (roles)
Traceback (innermost last):
* Module ZPublisher.Publish, line 100, in publish
* Module ZPublisher.mapply, line 88, in mapply
* Module ZPublisher.Publish, line 40, in call_object
* Module Products.CMFCore.PortalContent, line 125, in view
* Module Products.CMFCore.PortalContent, line 116, in __call__
* Module Shared.DC.Scripts.Bindings, line 306, in __call__
* Module Shared.DC.Scripts.Bindings, line 343, in _bindAndExec
* Module Products.CMFCore.FSPageTemplate, line 191, in _exec
* Module Products.CMFCore.FSPageTemplate, line 124, in pt_render
* Module Products.PageTemplates.PageTemplate, line 96, in pt_render
<FSPageTemplate at /cps/cpsdocument_view used for /cps/workspaces/ss/qs>
* Module TAL.TALInterpreter, line 189, in __call__
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 642, in do_defineMacro
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 408, in do_optTag_tal
* Module TAL.TALInterpreter, line 393, in do_optTag
* Module TAL.TALInterpreter, line 388, in no_tag
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 663, in do_useMacro
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 408, in do_optTag_tal
* Module TAL.TALInterpreter, line 393, in do_optTag
* Module TAL.TALInterpreter, line 388, in no_tag
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 663, in do_useMacro
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 408, in do_optTag_tal
* Module TAL.TALInterpreter, line 393, in do_optTag
* Module TAL.TALInterpreter, line 388, in no_tag
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 629, in do_condition
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 686, in do_defineSlot
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 408, in do_optTag_tal
* Module TAL.TALInterpreter, line 393, in do_optTag
* Module TAL.TALInterpreter, line 388, in no_tag
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 686, in do_defineSlot
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 408, in do_optTag_tal
* Module TAL.TALInterpreter, line 393, in do_optTag
* Module TAL.TALInterpreter, line 388, in no_tag
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 408, in do_optTag_tal
* Module TAL.TALInterpreter, line 393, in do_optTag
* Module TAL.TALInterpreter, line 388, in no_tag
* Module TAL.TALInterpreter, line 233, in interpret
* Module TAL.TALInterpreter, line 561, in do_insertStructure_tal
* Module Products.PageTemplates.TALES, line 220, in evaluate
Line 14, Column 4
Expression: standard:'rendered_main|python:doc.render(proxy=here)'
Names:
{'container': <CPSDefaultSite instance at 02616230>,
'context': <ProxyDocument at /cps/workspaces/ss/qs>,
'default': <Products.PageTemplates.TALES.Default instance at 0x019E3FD0>,
'here': <ProxyDocument at /cps/workspaces/ss/qs>,
'loop': <SafeMapping instance at 029DBE40>,
'modules': <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter instance
at 0x019C10A8>,
'nothing': None,
'options': {'args': ()},
'repeat': <SafeMapping instance at 029DBE40>,
'request': <HTTPRequest, URL=http://localhost:8080/cps/workspaces/ss/qs/view>,
'root': <Application instance at 0260EB30>,
'template': <FSPageTemplate at /cps/cpsdocument_view used for
/cps/workspaces/ss/qs>,
'traverse_subpath': [],
'user': mPiton}
* Module Products.PageTemplates.Expressions, line 201, in __call__
* Module Products.PageTemplates.Expressions, line 189, in _eval
* Module Products.PageTemplates.ZRPythonExpr, line 47, in __call__
__traceback_info__: doc.render(proxy=here)
* Module Python expression "doc.render(proxy=here)", line 1, in <expression>
* Module Products.CPSDocument.CPSDocument, line 63, in render
* Module Products.CPSDocument.FlexibleTypeInformation, line 795, in
renderObject
* Module Products.CPSDocument.FlexibleTypeInformation, line 607, in
_computeLayoutStructures
* Module Products.CPSSchemas.Layout, line 233, in prepareLayoutWidgets
* Module Products.CPSSchemas.BasicWidgets, line 264, in prepare
* Module Products.CPSSchemas.DataModel, line 164, in __getitem__
* Module Products.CPSSchemas.DataModel, line 157, in checkReadAccess
* Module Products.CPSSchemas.Field, line 330, in checkReadAccess
* Module Products.CPSSchemas.Field, line 315, in _checkAccess
ReadAccessError: Read access to Prenom denied (roles)
D'avance merci de votre aide,
Cordialement,
_______________________________________________
cps-users-fr
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>