我正在使用 CanCan 进行授权。下面的代码按照我为用户设计的方式工作,即它允许非管理员用户查看他们自己的页面,但不能查看其他用户的页面。但是,定义成绩簿功能的行允许访问用户的成绩簿(它与属于用户的成绩簿是一对一的关系)以及能够查看其他用户的成绩簿。
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
但这会阻止访问任何成绩簿。我还尝试了无数其他排列无济于事。