Каков наилучший способ обойти авторизацию разработки для определенной записи, отмеченной общедоступной
Я использую devise и cancan в проекте Rails 3.2. У меня есть событие модель с
boolean flag общедоступный. Если событие отмечено как public = > true, то я хочу, чтобы кто-либо, подписавшийся или не имеющий доступ к записи с помощью
GET /events/:id
Если он помечен как public = > false, то ряд способностей cancan будет определять авторизацию и доступ к указанному ресурсу.
Каков наилучший образец для достижения этого?
Ответы
Ответ 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
Эта способность будет предоставляться всем пользователям; даже те, которые не вошли в систему.