2015-05-04 120 views
0

我正在创建REST API并在REST API中使用授权。只要用户没有被授权的行动就用下面的代码CanCan Rails授权

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 

下面的代码有人可以帮助我没有得到重定向到主页只为这一行动。

回答

0
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 
2

可以使用做的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