我在Rails 3.2项目中使用了devise和cancan。我有一个事件模型 布尔标志公开。如果事件标记为 public =>是的然后我想要任何人登录或不能使用
访问记录GET /events/:id
如果标记为 public =>错误然后一系列康康技能将决定授权和访问上述资源。
实现这一目标的最佳模式是什么?
答案 0 :(得分:21)
你可以跳过authenticate_user来做到这一点!如果你有这个args
skip_before_filter :authenticate_user!, :only => :show, :if => lambda {
if params[:id]
@event = Event.find(params[:id])
@event and @event.public?
else
false
end
}
答案 1 :(得分:-2)
不,不要跳过身份验证。您想跳过授权。更好的解决方案是使用public =>明确授权事件。真。
在你的康康技能课程中:
can :read, Event do |e|
some_other_authorization_boolean || e.public?
end
这项能力将授予所有用户;即使是那些没有登录的人。