2015-02-28 1 views
2

sur Zope et Plone vous pouvez enregistrer des autorisations comme ceci:Quel est le moyen de connaître un titre d'autorisation Zope en connaissant son identifiant (et vice-versa)?

<permission 
    id="choosen.id.for.your.permission" 
    title="Old Zope 2 permission, shown in ZMI" 
    /> 

Quelle est la façon d'obtenir le titre de l'autorisation de Python quand vous savez que l'ID de l'autorisation?

je veux dire quelque chose comme:

>>> something_magic.get('choosen.id.for.your.permission') 
'Old Zope 2 permission, shown in ZMI' 

Répondre

5

Les permissions sont enregistrées comme zope.security.interfaces.IPermission services publics par leur carte d'identité; vous pouvez ainsi les consulter par leur carte d'identité en utilisant zope.component.getUtility():

from zope.component import getUtility 
from zope.security.interfaces import IPermission 

permission = getUtility(IPermission, name=u'choosen.id.for.your.permission') 
print permission.title 

Pour aller dans l'autre sens, de titre id, vous devez rechercher tous les services publics:

from zope.component import getUtilitiesFor 
from zope.security.interfaces import IPermission 

searched_title = u'Old Zope 2 permission, shown in ZMI' 
name = next((name for name, p in getUtilitiesFor(IPermission) 
      if p.title == searched_title), None) 
+0

Pour une raison quelconque, il n'a pas été travaillant pour moi, mais probablement j'utilisais un mauvais identifiant. Merci! Alors, quel est le moyen le plus rapide d'obtenir l'ID du titre? –

+1

Je ne pense pas qu'il y en ait un; vous devez lister tous les utilitaires et rechercher: 'next ((nom pour nom, p dans getUtilitiesFor (IPermission) si p.title == recherché_title), None)' retournera le nom ou 'None' s'il n'y a pas une telle permission. –