brianhenryie / bh-wp-private-uploads
这是关于插件_title的简要描述。
Requires
- php: >=7.4
- ext-fileinfo: *
- psr/log: ^1.0.0
- wptrt/admin-notices: ^1.0
Requires (Dev)
- ext-json: *
- 10up/wp_mock: ^1.0
- alleyinteractive/wordpress-autoloader: ^1.1
- antecedent/patchwork: ^2.1
- brianhenryie/bh-wp-logger: dev-master
- brianhenryie/color-logger: ^1.0
- brianhenryie/composer-phpstorm: dev-master
- codeception/module-asserts: ^1.0
- codeception/module-cli: ^1.0
- codeception/module-db: ^1.0.0
- codeception/module-filesystem: ^1.0
- codeception/module-phpbrowser: ^1.0.0
- codeception/module-webdriver: ^1.0
- codeception/util-universalframework: ^1.0
- cweagans/composer-patches: *
- dealerdirect/phpcodesniffer-composer-installer: *
- jaschilz/php-coverage-badger: ^2.0
- kporras07/composer-symlinks: dev-master
- lucatume/wp-browser: ^3.2
- phpcompatibility/phpcompatibility-wp: ^2.1
- phpstan/extension-installer: ^1.3
- phpunit/phpcov: *
- squizlabs/php_codesniffer: *
- szepeviktor/phpstan-wordpress: ^1.3
- wordpress/wordpress: *
- wp-cli/dist-archive-command: dev-main
- wp-cli/wp-cli-bundle: *
- wp-coding-standards/wpcs: ^3.0
- wpackagist-plugin/woocommerce: *
- wpackagist-theme/twentytwenty: *
This package is auto-updated.
Last update: 2024-09-16 05:18:25 UTC
README
BH WP Private Uploads
这是一个库,可以轻松创建一个无法公开下载内容的WordPress上传子目录。基于Chris Dennis的卓越插件Private Uploads。添加了上传文件到受保护目录的便捷函数、CLI和REST API命令,并在目录公开时显示管理员通知。
简介
我在各种插件和库中需要这个功能
例如:
- BH WP Logger需要“logs”目录是私有的
- BH WP Mailboxes需要“attachments”目录是私有的
- BH WC Auto Print Shipping Labels & Receipts需要其PDF目录是私有的
主要功能是它定期运行HTTP请求以确认目录受保护。如果不,它将显示管理员通知。
然后,它允许管理员下载该目录中的所有文件,并有一个过滤器允许其他用户访问文件。
它复制了媒体/附件UI,并为自定义文章类型添加了用于上传文件的元框。
它远未完善,但还有很多内容未在此README中提及。
注意:在v1.0.0版本之前,每次发布都可能导致破坏性更改。
如果您决定使用此功能,我很乐意与您通话,讨论库的方向以及如何改进它。
正在进行的主要功能是允许文件与特定用户相关联,并允许基于父帖子的更广泛权限。特别是为了实现GDPR合规的自动删除。
安装
composer require brianhenryie/bh-wp-private-uploads
日志记录器仅是测试插件的开发需求。
以下代码假定您正在使用brianhenryie/strauss之类的工具前缀库命名空间。
实例化
以下代码将创建一个文件夹wp-content/uploads/my-plugin
,其中包含一个保护它的.htaccess
文件(通过WordPress重写规则),并创建一个cron作业以验证URL是否受保护,否则显示管理员通知。
$settings = new class() implements \BrianHenryIE\WP_Private_Uploads\Private_Uploads_Settings_Interface { use \BrianHenryIE\WP_Private_Uploads\Private_Uploads_Settings_Trait; public function get_plugin_slug(): string { return 'my-plugin'; } }; $private_uploads = \BrianHenryIE\WP_Private_Uploads\Private_Uploads::instance( $settings );
该特性能根据插件别名提供一些合理的默认值,这些默认值可以轻松覆盖。它还允许向前兼容,即可以添加到设置界面中的方法,并提供特质的默认值。
使用
可以将该$private_uploads
实例传递,或者可以在代码的任何地方访问单例,而无需再次设置。
$private_uploads = \BrianHenryIE\WP_Private_Uploads\Private_Uploads::instance();
\BrianHenryIE\WP_Private_Uploads\API\API
类(它扩展了Private_Uploads
)包含方便的函数,用于下载和将文件移动到私有上传文件夹。它们的签名类似于WordPress的内部函数,因为它们在幕后使用wp_handle_upload
并具有相同的返回签名。
// Download `https://example.org/doc.pdf` to `wp-content/uploads/my-plugin/2022/02/target-filename.pdf`. $private_uploads->download_remote_file_to_private_uploads( 'https://example.org/doc.pdf', 'target-filename.pdf' ); // Move `'/local/path/to/doc.pdf` to `wp-content/uploads/my-plugin/2022/02/target-filename.pdf`. $private_uploads->move_file_to_private_uploads( '/local/path/to/doc.pdf', 'target-filename.pdf' );
默认情况下,管理员可以通过其URL访问文件。这可以通过过滤器扩展到更多用户
/** * Allow filtering for other users. * * @param bool $should_serve_file * @param string $file */ $should_serve_file = apply_filters( "bh_wp_private_uploads_{$plugin_slug}_allow", $should_serve_file, $file );
例如,WooCommerce插件可能始终希望商店经理能够访问文件
add_filter( "bh_wp_private_uploads_{$plugin_slug}_allow", 'add_shop_manager_to_allow' ); function add_shop_manager_to_allow( bool $should_serve_file ): bool { return $should_serve_file || current_user_can( 'manage_woocommerce' ); }
高级
文件夹名称
文件夹名称可以轻松更改,例如wp-content/uploads/email-attachments
$settings = new class() implements \BrianHenryIE\WP_Private_Uploads\API\Private_Uploads_Settings_Interface { use \BrianHenryIE\WP_Private_Uploads\API\Private_Uploads_Settings_Trait; public function get_plugin_slug(): string { return 'my-plugin'; } /** * Defaults to the plugin slug when using Private_Uploads_Settings_Trait. */ public function get_uploads_subdirectory_name(): string { return 'email-attachments'; } }; $private_uploads = \BrianHenryIE\WP_Private_Uploads\Private_Uploads::instance( $settings );
CLI命令
在配置过程中轻松添加 CLI 命令
$settings = new class() implements \BrianHenryIE\WP_Private_Uploads\API\Private_Uploads_Settings_Interface { use \BrianHenryIE\WP_Private_Uploads\API\Private_Uploads_Settings_Trait; public function get_plugin_slug(): string { return 'my-plugin'; } /** * Defaults to no CLI commands when using Private_Uploads_Settings_Trait. */ public function get_cli_base(): ?string { return 'my-plugin'; } }; $private_uploads = \BrianHenryIE\WP_Private_Uploads\Private_Uploads::instance( $settings );
wp my-plugin download https://example.org/doc.pdf
!单例
不需要使用单例。
$private_uploads = new Private_Uploads( $private_uploads_settings, $logger ); // Add the hooks: new BH_WP_Private_Uploads( $private_uploads, $private_uploads_settings, $logger );
快速测试
使用 cURL 快速测试 URL 是否私有
curl -o /dev/null --silent --head --write-out '%{http_code}\n' http://localhost:8080/bh-wp-private-uploads/wp-content/uploads/private/private.txt
状态
待办事项
- 测试 API 和提供私有文件的类
- 将设置重点放在帖子类型上,而不是插件别名(可能需要将设置界面重命名为反映这一点)
- 使用 API 类作为参数实例化钩子,而不是设置(即避免交叉连线的情况)
- 为媒体上传 UI 添加文档
- 更新此文档,包括帖子类型对象筛选器。
- 验证此 README 中的所有测试步骤
- 使用 bh-wp-logger 进行测试
已经完成了一些 PHPUnit、WPCS、PhpStan 的工作,但仍有很多工作要做。
- 按文件级别设置用户权限。(自定义帖子类型,使用文件路径/URL 作为 GUID)
- 验收测试: https://github.com/gamajo/codeception-redirects
- 单元测试 REST 端点
- WordPress 安装在子目录中时,重写规则是否工作?
- 添加 Nginx 指令
- 检测用户的托管提供商
- GDPR 删除
- REST API 文件上传 -> webhook。
权限
我们已经注册了一个帖子类型来注册 REST 端点。对于需要与特定用户关联的文件,使它们成为帖子的作者。对于更广泛的权限,使用帖子的父级——例如,将父帖子设置为 WooCommerce 订单,任何被允许查看订单的人都可以查看文件。这也与隐私(GDPR 删除等)相关联。