Передача атрибутов метода контроллера в методы before_filter в Rails 3 - PullRequest
1 голос
/ 08 февраля 2011

Я пытаюсь разрешить доступ к галереям только тем пользователям, которые имеют разрешение на их просмотр.Галереи имеют много shared_users через разрешения и наоборот.Галереи также имеют только одного владельца.Владельцы и общие пользователи принадлежат к классу User.Это все отлично работает.Однако у меня проблема с фильтрами доступа.

Я использую следующий код, чтобы увидеть, разрешено ли пользователю видеть галерею, к которой он пытается получить доступ:

def authenticate_viewers!
  if user_signed_in? && current_user.can_view?(@gallery)
    return true
  end
  redirect_to root_url,
    :notice => "You must have permission to view this gallery."
  return false    
end

Как видите, can_view? требует @gallery, который я настраиваю в методе show, но before_filter не позволит вам получить доступ к атрибутам, установленным в методе, поскольку он разрешается до выполнения метода.Использование after_filter работает до тех пор, пока неавторизованный пользователь не попытается просмотреть галерею.Если это так, я получаю ошибку DoubleRender, так как after_filter позволяет странице отображаться, а затем пытается перенаправить.

Я просто подумал, что, возможно, я мог бы использовать params [: id] вместо @gallery, хотяЯ еще не пробовал, и в конечном итоге это может быть более эффективным (передача целого числа вместо объекта).В любом случае, есть ли способ заставить мой текущий код работать?или в моих интересах перейти на использование параметров (если это даже сработает)?

1 Ответ

0 голосов
/ 08 февраля 2011

Ух, хорошо.Это действительно полезно, просто начать писать здесь вопросы о SO, потому что, как и я, я обычно получаю мозговой штурм о том, как решить проблему.Вместо использования объекта @gallery я просто использую Gallery.find(params[:id]), и все работает как шарм.Слава Богу, мне не нужно переписывать весь мой код.

...