CanCan Rails 授权

CanCan Rails Authorization

我正在创建 REST API 并且还在 REST API 中使用授权。每当用户未被授权执行某项操作时,它会使用以下代码重定向到主页

rescue_from CanCan::AccessDenied do |exception|
  redirect_to "/", :alert => exception.message
end

对于 Rest API 方法,我不想在未经授权的访问时被重定向到此页面。相反,我想显示 json

{"Error_msg": "Not Authorized"}.

我的控制器有以下代码:

authorize_resource :class => false, :only => [:create_or_update]

其中 create_or_update 是我要检查授权的操作(方法)。

我的 ability.rb 在 editor 角色中有以下代码

can :create_or_update, :topology

谁能帮我避免仅为此操作重定向到主页。

您可以使用 respond_to

  rescue_from CanCan::AccessDenied do |exception|
    respond_to do |format|
      format.json { render(json: {"Error_msg": "Not Authorized"}, status: :forbidden)}
      format.html{
        redirect_to "/", :alert => exception.message
      }
    end
  end
rescue_from CanCan::AccessDenied do |exception|
 if exception.action.to_s == "create_or_update"
   err ={}
   err[:error_id] = "AUTHORIZATION_ERROR"
   err[:error_msg] = exception.message
   render json: err, status: 403
 else
   redirect_to "/", :alert => exception.message
 end
end