Я пытаюсь разрешить доступ к галереям только тем пользователям, которые имеют разрешение на их просмотр.Галереи имеют много 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, хотяЯ еще не пробовал, и в конечном итоге это может быть более эффективным (передача целого числа вместо объекта).В любом случае, есть ли способ заставить мой текущий код работать?или в моих интересах перейти на использование параметров (если это даже сработает)?