code: def perm_check(function, perm_check_func=_perm_check_func, raise_exception=False):
      
      def real_decorator(func):
          def wrapped(request, db, col, cmd, *args, **kwargs):
              bPermPass = perm_check_func(request, db, col, cmd) if perm_check_func else True
              if raise_exception and (not bPermPass):
                  raise PermissionDenied
              return func(request, db, col, cmd, *args, **kwargs) if bPermPass else {"error": "permission disallowed"}
  
          return wrapped
      return real_decorator(function)
docs: perm_check_func: the auth func with parameter db,col,cmd
      raise_exception: True: raise http 403 exception if permission check failed, otherwise return a JSON