【问题标题】:Individual s3 bucket for each user in laravel [closed]laravel中每个用户的单独s3存储桶[关闭]
【发布时间】:2021-10-13 02:59:21
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: php laravel amazon-s3 storage


    【解决方案1】:

    绝对要为所有人使用一个存储桶,然后将其与文件夹分开。在我看来,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}/"]);
    }
    

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

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 2018-11-26
      • 1970-01-01
      • 2010-09-06
      • 2021-09-06
      • 2023-04-05
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多