src/pyams_security/permission.py
changeset 2 94e76f8e9828
parent 0 f04e1d0a0723
child 72 6dd8bc7bb7b5
equal deleted inserted replaced
1:5595823c66f1 2:94e76f8e9828
    14 
    14 
    15 # import standard library
    15 # import standard library
    16 
    16 
    17 # import interfaces
    17 # import interfaces
    18 from pyams_security.interfaces import IPermission
    18 from pyams_security.interfaces import IPermission
       
    19 from zope.schema.interfaces import IVocabularyFactory
    19 
    20 
    20 # import packages
    21 # import packages
    21 from zope.interface import implementer
    22 from pyams_utils.request import check_request
       
    23 from zope.interface import implementer, provider
    22 from zope.schema.fieldproperty import FieldProperty
    24 from zope.schema.fieldproperty import FieldProperty
       
    25 from zope.schema.vocabulary import getVocabularyRegistry, SimpleTerm, SimpleVocabulary
    23 
    26 
    24 
    27 
    25 @implementer(IPermission)
    28 @implementer(IPermission)
    26 class Permission(object):
    29 class Permission(object):
    27     """Permission utility class"""
    30     """Permission utility class"""
    46     ZMI features
    49     ZMI features
    47     """
    50     """
    48     if not IPermission.providedBy(permission):
    51     if not IPermission.providedBy(permission):
    49         permission = Permission(permission)
    52         permission = Permission(permission)
    50     config.registry.registerUtility(permission, IPermission, name=permission.id)
    53     config.registry.registerUtility(permission, IPermission, name=permission.id)
       
    54 
       
    55 
       
    56 @provider(IVocabularyFactory)
       
    57 class PermissionsVocabulary(SimpleVocabulary):
       
    58     """Permissions vocabulary"""
       
    59 
       
    60     interface = IPermission
       
    61 
       
    62     def __init__(self, *args, **kwargs):
       
    63         request = check_request()
       
    64         registry = request.registry
       
    65         translate = request.localizer.translate
       
    66         terms = [SimpleTerm(p.id, title=translate(p.title))
       
    67                  for n, p in registry.getUtilitiesFor(self.interface)]
       
    68         terms.sort(key=lambda x: x.title)
       
    69         super(PermissionsVocabulary, self).__init__(terms)
       
    70 
       
    71 getVocabularyRegistry().register('PyAMS permissions', PermissionsVocabulary)