認証にCanCanを使用しています。以下のコードは、私がユーザーに対して意図したとおりに機能しています。つまり、管理者以外のユーザーは自分のページを表示できますが、他のユーザーのページは表示できません。ただし、Gradebook 機能を定義する行では、ユーザーの Gradebook へのアクセス (ユーザーに属する Gradebook との has-one 関係) と、他のユーザーの gradebook の表示の両方が許可されます。
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.has_role? :admin
can :manage, :all
else
can :read, User, :id => user.id
can :read, Gradebook, :user_id => user.id
end
end
end
CanCan のドキュメントには、次の例が含まれています。
can :read, Project, :active => true, :user_id => user.id
これは私がやろうとしていることのモデルを提供しているようですが、ユーザー自身の成績表へのアクセスを許可しながら、他のユーザーの成績表へのアクセスを防ぐために CanCan を取得することはできません。私も次のことを試しました:
cannot :read, Gradebook do |book|
book.user_id != user.id
end
ただし、これにより成績表へのアクセスが妨げられます。また、無数の他の順列を試してみましたが、役に立ちませんでした。