class FilePolicy
{
public function download(User $user, FileModel $file): bool
{
return $user->isAdmin();
//OR
return $user->hasAccessTo($file); // assuming you have that function
}
public function show(User $user, FileModel $file): bool
{
return $user->isAdmin();
//OR
return $user->hasAccessTo($file); // assuming you have that function
}
}
// XController.php
public function download(FileModel $file): void
{
if ($request->user()->cannot('download', FileModel)) {
abort(403);
}
return Storage::response($file->filename);
}
的数据
在你看来刀锋
@can('show', $file) // similar for download
<!-- The current user can see the file... -->
@endcan
2条答案
按热度按时间t1qtbnec1#
有很多方法可以做到这一点(中间件、策略、user_permissions等)。
我的建议是 (我不知道你的模型调用了什么,也不知道你的代码的结构,但是当你有了这个想法,就把它应用到你的代码中去吧):
config/filesystems.php
中添加新磁盘字符串
$file->storeAs("uploads", "image_x.jpg", "private");
或使用Storage Facade使用策略的示例
的数据
型
ni65a41a2#
您可以考虑使用临时url函数。如果用户有访问权限,您可以为他创建一个临时url并给予用户访问权限。由于临时url已过期,因此无法与其他用户共享url。这是处理文件权限的最佳方法:
字符串