Как разрешить только авторизованным пользователям просматривать изображения - PullRequest
0 голосов
/ 27 января 2011

У меня есть приложение Ruby on Rails (2.2.2), где пользователи могут загружать изображения и помечать их как «заблокированные». Это поместит их в другую папку, чем если вы не отметите это. Обычная папка загрузки - / uploads / Image, а заблокированная папка - / uploads / vip / Image. Я хотел бы заблокировать только папку VIP, чтобы вы не могли отправить ссылку кому-либо и просмотреть ее без входа в систему. Я думаю, логика должна быть перенаправлена ​​в приложение, а не просто обслуживать изображение вслепую. Вопрос как?

Создание модели в рельсах не вариант, так как эти изображения загружены fckeditor и будут просто записаны и связаны без дальнейшей логики.

Ответы [ 2 ]

0 голосов
/ 28 января 2011

Возможно, вам придется переосмыслить, как разработано ваше приложение, поскольку не будет никакого способа (насколько это может видеть этот n00b) заблокировать определенные пути, не имея где-нибудь модели изображения.Существует драгоценный камень Rails (ссылка), который позволит вам полностью интегрировать fckeditor с моделями и контроллерами Rails в вашем приложении.

Вот что я бы сделал.

  1. Создайте модель и контроллер «изображения» с минимальными полями user_id:integer и protected:boolean, :default => false в миграции БД.Это облегчит прямую ссылку на определенные изображения, а не на другие, и отследит, кто загрузил изображение.Обязательно установите отношение belongs_to :user в модели изображения.
  2. Настройте свою пользовательскую модель с отношением has_many: images, чтобы привязать пользователей к загружаемым фотографиям.
  3. Использовать Authlogic для аутентификации пользователей и требовать, чтобы на определенных страницах вход пользователя осуществлялся с использованием метода before_filter :current_user, предоставленного Authlogic.
  4. Реализация rails-ckeditor gem with Paperclip , чтобы пользователи могли редактировать контент и загружать фотографии.Вы можете настроить PaperClip так, чтобы изображения сохранялись либо в папке «VIP», либо в обычной папке на основе «защищенного» поля, указанного в модели «изображения».
  5. Отредактируйте файл rout.rb, включив в него map.resources :images заявление, которое поможет создать полные URL-адреса для каждой загружаемой фотографии.

Этого должно быть достаточно, чтобы вы выбрали правильный путь.Если вы реализуете это правильно, у вас должна быть возможность разрешать пользователям загружать фотографии в fckeditor, выбирать, будут ли они защищены или нет «VIP», что должно сохранять фотографии в указанной вами папке и разрешать только прямые ссылки наVIP фотографии и другие требуют, чтобы пользователь войти / создать и учетную запись.Удачи!

~ Дан

0 голосов
/ 27 января 2011

Имейте фильтр до, как before_filter :authenticate_user!, если вы используете devise . Это перенаправит на страницу входа, если пользователь не вошел в систему. Изображения обслуживаются через действие контроллера.

...