fritzmg / contao-file-access
Contao 扩展,允许前端用户访问文件限制。
Requires
- php: ^7.4 || ^8.0
- contao/core-bundle: ^4.13 || ^5.0
- contao/image: ^1.2
- symfony/config: ^5.2 || ^6.0
- symfony/dependency-injection: ^5.2 || ^6.0
- symfony/http-foundation: ^5.2 || ^6.0
- symfony/http-kernel: ^5.2 || ^6.0
- symfony/security-core: ^5.2 || ^6.0
- symfony/service-contracts: ^2.5 || ^3.0
- webmozart/path-util: ^2.3
Requires (Dev)
README
Contao 文件访问
Contao 扩展,允许已登录的前端用户直接访问受保护的文件。
用法
安装此扩展后,您将能够允许成员访问未公开的文件。只需编辑一个文件夹,并启用允许的成员组。如果您选择“无”,则文件在一般情况下将不可访问(但例如可以通过下载内容元素访问)。如果用户被允许访问任何父文件夹,则用户将有权访问文件,即每个文件夹继承成员组访问设置。
从版本 1.1.0
开始,脚本在文件访问权限不足时生成常规的 Contao 401 页面(对于旧版本的 Contao 生成 403)。因此,您可以执行以下操作
- 在您的站点结构中创建一个类型为
401 未认证
的页面,不设置重定向。 - 创建一个不带重定向设置的登录模块。
- 将此登录模块添加到
401 未认证
页面。
现在,当未登录的用户打开文件链接时,他将看到登录表单。登录后,用户将被“重定向”回文件(实际上没有发生重定向,用户停留在同一 URL)。
响应
- 如果文件不在文件系统的数据库中,则生成
404
响应。 - 如果文件的所有父文件夹都没有设置任何成员组,则生成
404
响应。 - 如果用户未登录,Contao 4.6 及以上版本生成
401
响应,否则生成403
响应。 - 如果用户已登录且他无法访问任何父文件夹,则生成
403
响应。
用户主页
从版本 2.3.0
开始,您还可以在成员设置中授予前端用户访问其用户主目录中文件的权限。
保护调整大小后的图像
从版本 2.4.0
开始,还可能自动保护受保护的文件的任何调整大小后的图像(缩略图),这些图像在其他情况下可以在 assets/images
下公开访问。您可以在您的配置中启用此功能
# config/config.yaml contao_file_access: protect_resized_images: true
请注意,这会给您的应用程序带来额外的负载,因为所有对任何调整大小后的受保护图像的请求都必须由应用程序处理。
此外,由于技术限制,如果您在当前浏览器会话中登录了后端,您将始终可以访问这些图像(即查看这些图像)。
重要说明
由于此访问限制是通过PHP实现的,文件也是通过PHP发送到客户端的。这意味着需要足够大的 max_execution_time
,以便在脚本终止之前将任何文件传输到客户端。因此,你应该意识到,如果文件非常大或客户端与服务器的连接非常慢,或者两者兼而有之,则可能会出现问题。脚本尝试禁用 max_execution_time
,但无法保证这一定有效。此外,在Web服务器中可能还有其他超时。
如果您没有启用 protect_resized_images
(见上文)并且您使用受保护的图片的缩略图,则任何人都可以访问这些缩略图的URL。
致谢
本开发由KASTNER 和 ieQ-systems GmbH & Co. KG 赞助。