def expose(policy):
    """
    Annotate a method to permit access to contexts matching an authorization
    policy. The annotation may be specified multiple times. Methods lacking any
    authorization policy are not accessible.

    ::

        @mitogen.service.expose(policy=mitogen.service.AllowParents())
        def unsafe_operation(self):
            ...

    :param mitogen.service.Policy policy:
        The policy to require.
    """

    def wrapper(func):
        func.mitogen_service__policies = [policy] + getattr(
            func, "mitogen_service__policies", []
        )
        return func

    return wrapper