docs: def permissioned_model(cls, perm_type=None, path_fields=None, actions=None):
      """Function to set up a model for permissioning.  Can either be called
      directly, passing a class and suitable values for ``perm_type``,
      ``path_fields`` and ``actions``, or can be used as a class
      decorator, taking values for ``perm_type``, ``path_fields`` and
      ``actions`` from the ``TutelaryMeta`` subclass of the decorated
      class.
  
      """
      if not issubclass(cls, models.Model):
          raise DecoratorException(
              'permissioned_model',
              "class '" + cls.__name__ + "' is not a Django model"
          )
      added = False
      try:
          if not hasattr(cls, 'TutelaryMeta'):
              if perm_type is None or path_fields is None or actions is None:
                  raise DecoratorException(
                      'permissioned_model',
                      ("missing argument: all of perm_type, path_fields and " +
                       "actions must be supplied")
                  )
              added = True
              cls.TutelaryMeta = type('TutelaryMeta', (object,),
                                      dict(perm_type=perm_type,
                                           path_fields=path_fields,
                                           actions=actions))
          cls.TutelaryMeta.pfs = ([cls.TutelaryMeta.perm_type] +
                                  get_path_fields(cls))
          perms_objs = {}
          for a in cls.TutelaryMeta.actions:
              an = a
              ap = {}
              if isinstance(a, tuple):
                  an = a[0]
                  ap = a[1]
              Action.register(an)
              if isinstance(ap, dict) and 'permissions_object' in ap:
                  po = ap['permissions_object']
                  if po is not None:
                      try:
                          t = cls._meta.get_field(po).__class__
                          if t not in [models.ForeignKey,
                                       models.OneToOneField]:
                              raise PermissionObjectException(po)
                      except:
                          raise PermissionObjectException(po)
                  perms_objs[an] = po
          if len(perms_objs) == 0:
              cls.get_permissions_object = get_perms_object
          else:
              cls.get_permissions_object = make_get_perms_object(perms_objs)
          return cls
      except:
          if added:
              del cls.TutelaryMeta
          raise