brickx/maintenance-switch

用于从 Filament Panels 切换维护模式的简单插件。

1.0.2 2024-04-02 18:44 UTC

This package is auto-updated.

Last update: 2024-09-08 11:41:23 UTC


README

GitHub Tests Action Status Packagist Downloads

此插件允许您轻松从 Filament Panels 切换维护模式。您还可以设置一个自定义密钥令牌以绕过维护模式。

目录

安装

您可以通过 composer 安装此包

composer require brickx/maintenance-switch

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="maintenance-switch-config"

这是发布配置文件的内容

return [
    'secret' => null,
    'refresh' => false,
    'permissions' => false,
    'role' => false,
    'render_hook' => 'global-search.before',
    'icon' => 'heroicon-m-beaker',
    'tiny_toggle' => false,
];

您可以使用以下命令发布翻译

php artisan vendor:publish --tag="maintenance-switch-translations"

可选,您可以使用以下命令发布视图

php artisan vendor:publish --tag="maintenance-switch-views"

设置

首先,在您的面板配置中实例化此插件

use Brickx\MaintenanceSwitch\MaintenanceSwitchPlugin;

...

public function panel(Panel $panel) : Panel
{
    return $panel
        ->plugins([
            MaintenanceSwitchPlugin::make(),
        ]);
}

Laravel 11 不再附带 PreventRequestsDuringMaintenance 中间件。您可以使用以下方式创建一个

php artisan make:middleware PreventRequestsDuringMaintenance

然后填充以下内容

<?php

declare(strict_types=1);

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance as Middleware;
use Illuminate\Foundation\Http\MaintenanceModeBypassCookie;
use Illuminate\Http\RedirectResponse;

class PreventRequestsDuringMaintenance extends Middleware
{
    /**
     * The URIs that should be reachable while maintenance mode is enabled.
     *
     * @var array
     */
    protected $except = [];

    protected function bypassResponse(string $secret): RedirectResponse
    {
        // Optional: redirect to the Filament dashboard route when a secret is present, but of course, you can redirect to any URL you want.
        return redirect(route('filament.admin.pages.dashboard'))->withCookie(
            MaintenanceModeBypassCookie::create($secret)
        );
    }
}

如果您使用的是 Laravel 的其他版本,您可以简单地编辑现有的一个。

在 Laravel 11 中,您还需要将此中间件添加到相关路由。请考虑使用路由组来控制哪些路由应用中间件。

以下是一个 ./routes/web.php 的示例

<?php

use App\Http\Middleware\PreventRequestsDuringMaintenance;
use Illuminate\Support\Facades\Route;

// added the middleware but only to this group, the Filament routes are unaffected
Route::middleware([PreventRequestsDuringMaintenance::class])->group(function () {
    Route::get('/', function () {
        return view('welcome');
    });
});

使用

该插件将在您的 Filament 管理面板中添加一个切换按钮,位于全局搜索栏左侧。

点击它将在网站处于运行状态时触发 php artisan down 命令,否则将触发 php artisan up 命令。

密钥令牌

您可以在配置文件中设置一个密钥令牌。如果这样做,您可以通过访问以下 URL 来绕过维护模式: https://your-domain.test/{secret}

如果将 secret 键设置为 null,则在每次激活维护模式时都会动态生成一个随机密钥。请务必将其复制到某处,或者如果出现问题,您将不得不手动触发 php artisan up 命令。

刷新间隔

如果您想指示浏览器在一段时间后刷新页面,您可以在配置文件中设置 refresh 键。

设置为 false 时,不会发送 Refresh HTTP 标头。您可以通过指定一个整数来定义在维护模式下重新加载页面的秒数。

可见性

默认情况下,任何已登录用户都可以切换维护模式。

如果您想将此功能限制为特定用户,您可以在配置文件中设置 permissions 键。

该插件将使用 Laravel 的默认授权系统通过 User 模型上的 can 方法检查权限。它也可以很好地与 Spatie 的 Laravel Permission 包一起使用。

位置

默认情况下,切换按钮将放置在全局搜索栏之前。如果您想更改此设置,您可以在配置文件中调整 render_hook 键。

您可以使用 Filament 提供的任何渲染钩子

主题

切换按钮的默认样式与 Filament 的默认主题配合良好。但是,为了额外的颜色和进一步的自定义,您可以将此插件的路径添加到面板的 tailwind.config.js 文件的 content 数组中

module.exports = {
    content: [
        './vendor/brickx/maintenance-switch/resources/views/**/*.blade.php',
    ],
}

变更日志

请参阅变更日志以获取有关最近变更的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请审查我们的安全策略了解如何报告安全漏洞。

鸣谢

许可证

MIT许可证(MIT)。请参阅许可证文件以获取更多信息。