laravel 如何在使用store()或putFile()时为上传的文件设置权限?

pod7payv  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(152)

来自Laravel文件:https://laravel.com/docs/9.x/filesystem#file-uploads
我可以使用以下任一方法从请求上载文件:

$path = $request->file('avatar')->store('avatars');

$path = Storage::putFile('avatars', $request->file('avatar'));

这些文档还提到了如何设置文件的权限:https://laravel.com/docs/9.x/filesystem#file-visibility
在config中为publicprivate设置权限,然后使用put()方法。但是当我从请求中获取文件时,我需要使用putFile()store(),而不是put(),因此在这种情况下如何设置权限?

mm9b1k5b

mm9b1k5b1#

如果您不希望文件公开,请不要使用公共存储。
我不知道这是否是检查文件权限的最佳方法,但当我需要向特定用户给予文件访问权限时,我会这样做:

use Storage;

class AdmissionFileController extends Controller
{
    public function show(AdmissionFile $admissionFile)
    {
        $this->authorize('view', $admissionFile);

        $mimetype = Storage::mimeType($admissionFile->path);
        return response(Storage::disk('local')->get($admissionFile->path))->header('Content-Type', $mimetype);
    }
}

在这个例子中,文件的路径存储在AdmissionFile上的DB中。我使用Policies来检查查看文件的权限:

class AdmissionFilePolicy
{
    use HandlesAuthorization;

    public function view(User $user, AdmissionFile $admissionFile)
    {
        return $user->id === $admissionFile->user_id;
    }
}

相关问题