关于 ruby?? on rails:绕过标记为 public 的特定记录的设计授权的最佳方法是什么

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

此能力将授予所有用户;即使是未登录的。