scaleplan/access-to-files

此软件包的最新版本(dev-master)没有提供许可证信息。

使用 Redis、PHP 和 Nginx 缓存文件

dev-master 2020-11-16 11:24 UTC

This package is auto-updated.

Last update: 2024-09-16 19:03:35 UTC


README

控制对私有文件的访问。

安装

composer require scaleplan/access-to-files

工作原理

假设我们需要向当前授权用户授予对 document.pdf 文件 1 小时和 picture.jpg 文件 5 分钟的访问权限。这些文件默认情况下对该用户不可访问。

首先,执行以下代码

//First file
AccessToFiles::getInstance(3600)->addFiles(['document.pdf']);

//The second file
AccessToFiles::getInstance(300)->addFiles(['picture.jpg']);

在这部分,我们创建了两个 AccessToFiles 对象 - 一个用于打开 1 小时的访问权限,另一个用于打开 5 分钟的访问权限。然后,将文件添加到每个对象中。

AccessToFiles 类总是为访问时间创建一个实例,这意味着如果在上述代码之后执行以下操作

$af = AccessToFiles::getInstance(3600);

则不会创建新对象,而只会返回上述创建的对象,供 1 小时的文件使用。

为了为每个实例打开文件访问,必须执行 allowFiles 方法

AccessToFiles::getInstance(3600)->allowFiles();
AccessToFiles::getInstance(300)->allowFiles();

此方法将有关文件(文件类型、时长、对谁)的元数据写入元数据存储库,默认情况下是 Redis。

现在,如果同一用户访问这些文件,他们将能够访问,但在经过指定的时长间隔(1 小时和 5 分钟)后,文件将再次不可用。

对于临时打开的文件的返回,nginx 的 lua 脚本响应,该脚本可以爬入 Redis b 检查是否有请求的文件的记录,如果有,则提供该文件。

lua 脚本如何确定用户?

当写入文件元数据时, AccessToFiles 使用 指纹 方法,尝试收集尽可能多的关于当前用户的数据,以便其用户不会被混淆。

默认情况下,只使用会话标识符,但在会话被盗的情况下也可以使用 HTTP 头部。

注意: 存储在项目中的 lua 脚本只与默认的识别设置兼容,即如果只使用会话标识符,则需要进行一些小的改进才能扩展该集合。


文档