初めての Ruby on Rails アプリに cancan を取り込もうとしています。
始めるのに問題があります...それは確かに基本的なものです。
私のアプリケーションにはプロジェクトのリストがあり、ユーザーはそれらのいくつかを表示する権限を持っている場合と持っていない場合があります。
これを ProjectsController に追加しました:
class ProjectsController < ApplicationController
load_and_authorize_resource
私の初期化メソッドは次のようになります。
def initialize(user)
user ||= User.new # guest user
puts "******** Evaluating cancan permissions for: " + user.inspect
can :read, Project do |project|
puts "******** Evaluating project permissions for: " + project.inspect
# project.try(project_users).any?{|project_user| project_user.user == user}
1 == 1 #POC test!
end
end
これがあると、プロジェクトのインデックス ページが表示されますが、プロジェクトが一覧表示されません。
私がここに持っている2つの質問:
- すべてのプロジェクトに対して true が返されるため、すべてのプロジェクトが表示されるべきではありませんか?
- 2 番目の puts ステートメントは Rails サーバー コンソールに書き込まれませんが、最初のステートメントは書き込まれます。何故ですか???
初期化メソッドを次のように変更すると:
def initialize(user)
user ||= User.new # guest user
puts "******** Evaluating cancan permissions for: " + user.inspect
can :read, Project
end
... 期待どおりにすべてのプロジェクトが表示されます
can :read, Project の行を削除すると、プロジェクトのインデックス ページにアクセスしようとしてセキュリティ例外が発生します。これも期待どおりです。