绕过标记为公共的特定记录的设计授权的最佳方法是什么

bra*_*ing 12 ruby-on-rails devise cancan

我在Rails 3.2项目中使用了devise和cancan.我有一个带有布尔标志public事件模型.如果事件被标记为public => true,那么我希望任何人登录或不能访问该记录

GET /events/:id
Run Code Online (Sandbox Code Playgroud)

如果它被标记为public => false,那么一系列康康技能将决定授权和访问上述资源.

实现这一目标的最佳模式是什么?

shi*_*ara 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
  }
Run Code Online (Sandbox Code Playgroud)