What is the best way to bypass devise authorization for a specific record marked public
我在 Rails 3.2 项目中使用 devise 和 cancan。我有一个事件模型
布尔标志公共。如果事件被标记为 public => true 那么我希望任何人,无论是否登录,都能够使用
访问记录
1 | GET /events/:id |
如果它被标记为 public => false 那么一系列 cancan 能力将决定对上述资源的授权和访问。
实现这一目标的最佳模式是什么?
您可以通过跳过 authenticate_user 来做到这一点!如果你有这个 args
1 2 3 4 5 6 7 8 | skip_before_filter :authenticate_user!, :only => :show, :if => lambda { if params[:id] @event = Event.find(params[:id]) @event and @event.public? else false end } |
不,不要跳过身份验证。您想跳过授权。更好的解决方案是使用 public => true 显式授权事件。
在你的康康舞能力等级中:
1 2 3 | can :read, Event do |e| some_other_authorization_boolean || e.public? end |
此能力将授予所有用户;即使是未登录的。