On 22 Jun 2005, at 10:10, Piton Marco wrote:
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)
Il va falloir s'y mettre :)
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.
Le mieux est d'utiliser
python: not user.has_role(('Rolex1', 'Rolex2', 'Rolex3',
'Rolex4'), context)
sachant que si ici on passe plusieurs rôles à has_role, un OU logique
est fait.
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) ?
Rien de simple, non, même si on peut trouver des expressions qui
marchent.
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é ?
Il faut lire l'API de Zope, et celle de CMF.
Florent
--
Florent Guillaume, Nuxeo (Paris, France) CTO, Director of R&D
+33 1 40 33 71 59 http://nuxeo.com [EMAIL PROTECTED]
_______________________________________________
cps-users-fr
Adresse de la liste : [email protected]
Gestion de l'abonnement : <http://lists.nuxeo.com/mailman/listinfo/cps-users-fr>