docs: def get_permissions_assignments(self, obj=None, permission=None):
          """
          :param permission: return only roles having this permission
  
          :returns: an dict where keys are `permissions` and values `roles` iterable.
          """
          session = None
          if obj is not None:
              assert isinstance(obj, Entity)
              session = object_session(obj)
  
              if obj.id is None:
                  obj = None
  
          if session is None:
              session = db.session()
  
          pa = session.query(
              PermissionAssignment.permission, PermissionAssignment.role
          ).filter(PermissionAssignment.object == obj)
  
          if permission:
              pa = pa.filter(PermissionAssignment.permission == permission)
  
          results = {}
          for permission, role in pa.yield_per(1000):
              results.setdefault(permission, set()).add(role)
  
          return results