私はRailsアプリケーションでCanCan gemを使用していますが、現在のリクエストが私のアプリケーションの保護されたリソースであるかどうかを確認します。現在のリクエストがCanCanでRailsで保護されているかどうか確認してください
だから例えば私は、次があります。
class AdminController < ApplicationController
load_and_authorize_resource
end
要求がカンカンで保護されている場合、私は確認することができますどのように?
私はコントローラーとアクションをparamsでアクセスできます。標準can?
とcannot?
ヘルパーを使用することはできません。なぜなら、アクション自体に保護があるのではなく、current_user
にアクセス許可があるかどうかを確認するからです。例えばので
:
class ApplicationController < ActionController::Base
before_action :check_protected
def check_protected
if can? params[:action].to_sym, Object.const_get(params[:controller].classify)
# resource is protected
else
# resource is not protected
end
end
end
^^ユーザーが権限を持っていない場合、それは常にとき何current_user
false
を言わないかだろうので、これは動作しません。 リソース自体がCanCanで保護されているかどうかを確認する必要があります。私はこれらの例があった場合
は:
class PostsController < AdminController
def index
end
end
class HomeController < ApplicationController
def index
end
end
をPostsControllerのための指標は、保護されたことを特定でき、かつ保護されていないようにHomeControllerのインデックス必要があります。
カンカンは、ユーザー認証の逸品です
、目的は、ユーザが持っているかどうかを確認することです許可されたリソースへのアクセス。これには能力クラスとcurrent_userメソッドが必要です。 [このページの](https://github.com/ryanb/cancan/wiki/changing-defaults)で説明されているように、デフォルトを上書きすることができます。 – trueinViso
@trueinViso私は 'Ability'クラスと' current_user'メソッドの両方を持っています。しかし、現在のコントローラメソッドにcancan属性が付いているかどうかを知りたい。 – Cameron
コントローラメソッドには、cancan属性がアタッチされていません。能力はcurrent_userで定義されます。 skip_authorize_resourceと言うと、current_userがリソースへのアクセス権を持っているかどうかはチェックされません。 – trueinViso