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>

Répondre à