Rails 3.1 Запретить редактирование изображений других пользователей - PullRequest
1 голос
/ 30 октября 2011

У меня есть веб-приложение, которое использует Devise для аутентификации. Это сайт, который позволяет пользователю загружать изображения, поэтому URL будет /images/2. Есть отдельный контроллер изображения.

Я обнаружил, что пользователь может редактировать изображение, которое он не загружал, путем изменения URL-адреса, например, /images/4/edit. Есть ли способ заблокировать их от редактирования изображений других пользователей и разрешить им редактировать только свои собственные?

Контроллер изображений, модель и т. Д. Были созданы с использованием rails g scaffold, если это поможет.

1 Ответ

3 голосов
/ 30 октября 2011

Для этого существует множество различных решений, но самое простое при запуске редактирования / обновления / уничтожения - загрузить изображение от текущего пользователя, а не от всех изображений:

def edit
  @image = current_user.images.find( params[:id] )
end

def update
  @image = current_user.images.find( params[:id] )
  # do whatever has to be done
end

def destroy
  @image = current_user.images.find( params[:id] )
  # do whatever has to be done
end

Кроме того, использование скаффолдов - это действительно плохая практика, вам просто нужно написать собственный код, он проще, продуктивнее и поможет вам понять, как должна работать инфраструктура.

Вы также можете использовать для этого вложенные контроллеры, но вам придется немного изучить, чтобы понять, как они работают и почему они могут быть лучшим решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...