Как запретить пользователю доступ к файлам Active Storage других пользователей - PullRequest
0 голосов
/ 05 февраля 2020

В моем приложении Rails я хотел бы запретить пользователю доступ к файлам Active Storage другого пользователя.

Я попробовал решение, показанное здесь , но если я включу link_to на указанный файл пользователя c, я все еще могу получить доступ к этому файлу как другой пользователь. Например, если я добавлю следующий код, мое приложение Rails позволит мне загрузить файл, даже если он принадлежит другому пользователю. Я бы хотел, чтобы он перенаправлял куда-то еще, вместо того, чтобы позволять мне скачивать файл, если он не мой.

rails_blob_path(User.find(57).file, disposition: "attachment")

Я прочитал, что Active Storage использует «безопасность через неизвестность». Означает ли это, что, пока я не включу прямую ссылку на файл конкретного пользователя c в моем приложении, как я это делал выше (то есть путь BLOB-объекта Rails к файлу другого пользователя), я могу быть уверен что пользователи не могут получить доступ к файлам друг друга? Или есть другой способ предотвратить это?

1 Ответ

0 голосов
/ 04 мая 2020

Вы можете сделать что-то подобное, чтобы разрешить доступ только владельцу файла и пользователю-администратору, например, в контроллере песен

before_action :require_same_user, only: [:show, :edit, :update, :destroy]


  def require_same_user
  if current_user != @song.user and !current_user.admin?
    redirect_to root_path, alert: "Access Denied!"
  end  
end

удалить current_user.admin, если у вас нет пользователя-администратора

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