Каков наилучший способ обойти разработку авторизации для конкретной записи, помеченной как общедоступная? - PullRequest
12 голосов
/ 06 марта 2012

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

GET /events/:id

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

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

Ответы [ 2 ]

21 голосов
/ 06 марта 2012

Вы можете сделать это, пропустив authenticate_user!в случае, если у вас есть эти аргументы

  skip_before_filter :authenticate_user!, :only => :show, :if => lambda { 
    if params[:id]
      @event = Event.find(params[:id])
      @event and @event.public?
    else
      false
    end
  }
0 голосов
/ 06 марта 2012

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

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

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

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

...