laravel 中每个用户的个人 s3 存储桶

Individual s3 bucket for each user in laravel

我有一个 Laravel 应用程序,我想为我的注册用户提供一个安全的存储系统。

  1. 我应该如何规划它,我应该为每个用户创建一个新的存储桶,还是为一个存储桶中的每个用户创建文件夹
  2. 如何限制用户不能访问彼此的文件夹?

谢谢

一定要一桶一桶,然后用文件夹分开。在我看来,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配置有一个根选项,指示哪个文件夹应该是根。

所以在服务提供商中,你实际上可以做这样的事情。

if ($user = Auth::user()) {
    config(['storage.disks.s3.root' => "/{$user->id}/"]);
}

我认为这是一个有点不稳定的解决方案,并且当上下文中没有用户(例如在命令或作业中)时很难控制。但认为它作为另一种替代解决方案是合适的。