【发布时间】:2021-10-13 02:59:21
【问题描述】:
我有一个 Laravel 应用程序,我想为我的注册用户提供一个安全的存储系统。
- 我应该如何规划,应该为每个用户创建一个新存储桶,还是在一个存储桶中为每个用户创建文件夹
- 如何限制用户不能访问彼此的文件夹?
谢谢
【问题讨论】:
标签: php laravel amazon-s3 storage
我有一个 Laravel 应用程序,我想为我的注册用户提供一个安全的存储系统。
谢谢
【问题讨论】:
标签: php laravel amazon-s3 storage
绝对要为所有人使用一个存储桶,然后将其与文件夹分开。在我看来,Buckets 更多是为了将应用程序分开以进行交互。
我会创建一个前缀并始终使用它,如果代码使用相同的功能,您可以确保它们不能与其他文件交互。
public function saveFile($user, $fileName, $file) {
Storage::put($user->getS3Prefix() . $fileName, $file )
}
public function getFile() {
return Storage::get($user->getS3Prefix() . $fileName)
}
现在在您的用户模型上,生成前缀,理论上可能是用户 ID。
class User {
public function getS3Prefix() {
return "/{$this->id}/";
}
}
这是一个简单直接的解决方案,我觉得你不需要想太多。
有一个聪明的解决方案,S3 config 有一个 root 选项,它指示哪个文件夹应该是 root。
所以在服务提供商中,你实际上可以做这样的事情。
if ($user = Auth::user()) {
config(['storage.disks.s3.root' => "/{$user->id}/"]);
}
我认为这是一个有点不稳定的解决方案,并且当上下文中没有用户时很难控制,例如在命令或作业中。但认为它作为另一种替代解决方案是合适的。
【讨论】: