def permission_set(self, name, func=None):
        """Define a new permission set (directly, or as a decorator).

        E.g.::

            @authz.permission_set('HTTP')
            def is_http_perm(perm):
                return perm.startswith('http.')

        """
        if func is None:
            return functools.partial(self.predicate, name)
        self.permission_sets[name] = func
        return func