在我的Rails应用程序中,我想阻止一个用户访问另一个用户的Active Storage文件。
我尝试了显示为here的解决方案,但是如果我包含指向特定用户文件的link_to,我仍然能够以其他用户身份访问该文件。例如,如果我包含以下代码,即使我的文件属于其他用户,我的Rails应用程序也允许我下载该文件。我希望它重定向到其他地方,而不是允许我下载不是我的文件。
rails_blob_path(User.find(57).file, disposition: "attachment")
我读到Active Storage使用“通过默默无闻的安全性”。这是否意味着,只要我不像我之前所做的那样在我的应用程序中不包含对特定用户文件的直接引用(即,另一个用户文件的Rails Blob路径),我就可以确信用户不会访问彼此的文件?还是有另一种方法可以防止这种情况?
您可以执行类似的操作来阻止访问,例如在歌曲的控制器中
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