2012-11-17 3 views
0

Je pensais que cela devait être facile mais j'ai vraiment des problèmes pour le trouver: je voudrais vérifier pour une permission acquise d'un rôle sur un objet.Zope: obtention de l'autorisation d'un rôle sur l'objet

Je ne veux pas vérifier l'utilisateur réel de rôles ou autorisations, je veux juste vérifier si dire sur un objet anonyme a l'autorisation "des informations de contenu d'accès. C'est facile si l'autorisation est définie sur l'objet en question, mais s'avère plus difficile lorsque l'autorisation est acquise.

J'ai essayé ceci:

siteRoles = ('Anonymous', 'myRole1', 'myRole2', 'Manager') 
permission = 'Access contents information' 

rolesDictList = self.rolesOfPermission(permission) 

roles = [roleDict['name'] for roleDict in rolesDictList if roleDict['selected']] 

for i, role in enumerate(siteRoles): 
    if role in roles: 
     roleMin = i 
     break 

return roleMin 

Cela ne fonctionne pas, car il ne donne pas les autorisations acquises.

Ma prochaine idée était de marcher à travers les parents, vers le haut jusqu'à ce que je trouve certaines autorisations qui ne sont pas acquises. Mais cela ne résoudrait pas vraiment le problème, car il ignorerait les permissions qui sont placées plus haut dans la hiérarchie (ok, je pourrais vérifier pour acquis et continuer vers le haut). Il y a aussi une bizarrerie: 'Manager' est toujours sélectionné dans rolesOfPermission. Pourquoi cela est-il ainsi?

Quoi qu'il en soit, je suppose qu'il doit y avoir une façon plus simple de faire cela?

Répondre

3

suffit d'utiliser la fonction rolesForPermissionOn():

from AccessControl.PermissionRole import rolesForPermissionOn 

roles = rolesForPermissionOn(permission, context) 

Ceci retourne une liste des rôles qui ont l'autorisation spécifique pour le contexte donné. Il va marcher la chaîne d'acquisition au besoin.

Questions connexes