declarative_authorization を使用して Rails3 コントローラーを保護しようとしています。
コントローラーには、7 つの RESTful アクション、3 つのカスタム メンバー アクション (アクティブ化、非アクティブ化、コピー)、および 1 つのカスタム コレクション アクション (パブリック) があります。ただし、'public' アクションは 1 つのレコードしか返しません。
認証されたユーザーは、カスタム コレクション アクション (パブリック) のみを使用できる必要があります。残りは current_user のみが利用できます。
has_permission_on :foos, :to => :public
has_permission_on :foos, :to => [:full_control, :copy, :activate, :deactivate] do
if_attribute :user => is {user}
end
privilege :full_control, :includes => [:index, :show, :new, :create, :edit, :update, :destroy]
4 つのカスタム アクションは、routes.rb ファイルで定義されています。
resources :users do
resources :foos do
collection do
get :public
end
member do
post :activate, :copy, :deactivate
end
end
end
ユーザー :has_many Foos; Foo :belongs_to はユーザーです。
FoosController で定義されている「標準」アクセス制御 (filter_resource_access :nested_in => :user) は、7 つの RESTful アクションへのアクセスを制御しているように見えますが、他の 4 つのアクションへのアクセスを制御できません (予想どおり)。
FooController を次のように変更すると:
filter_access_to :all, :nested_in => :users, :attribute_check => true
「ID なしで Foo が見つかりませんでした」というエラーが表示されます。
質問:
- ドキュメントは、filter_access_to が使用されている場合、Foo モデルをロードするために :before_filter が自動的に呼び出されることを示唆しているようです。私は間違っていますか?filter_access_to の追加構成が必要ですか? :before_filter を手動で構成する必要がありますか?
- 私の目的のためにモデルに using_access_control を追加する必要がありますか? コントローラーにアクセス制御がある場合、いつモデルにアクセス制御を追加する必要があるのか 少しわかりません。
- ドキュメントには、'create' という名前の特権が記載されています。これは次のように定義されています: 特権 :create, :includes => :new. さらに、:new アクションに加えて、この特権には、その名前の結果として :create アクションが自動的に含まれますか?
- authentication_rules.rb ファイルが変更された場合、新しいルールを適用するためにサーバーを再起動する必要がありますか?