Подтвердить что ты не робот

Каков наилучший способ обойти авторизацию разработки для определенной записи, отмеченной общедоступной

Я использую devise и cancan в проекте Rails 3.2. У меня есть событие модель с boolean flag общедоступный. Если событие отмечено как public = > true, то я хочу, чтобы кто-либо, подписавшийся или не имеющий доступ к записи с помощью

GET /events/:id

Если он помечен как public = > false, то ряд способностей cancan будет определять авторизацию и доступ к указанному ресурсу.

Каков наилучший образец для достижения этого?

4b9b3361

Ответ 1

Вы можете сделать это, пропустив 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
  }

Ответ 2

Нет, не пропустите аутентификацию. Вы хотите пропустить авторизацию. Лучшим решением было бы явно разрешить события с public = > true.

В вашем классе способности cancan:

can :read, Event do |e|
  some_other_authorization_boolean || e.public?
end

Эта способность будет предоставляться всем пользователям; даже те, которые не вошли в систему.