beebmx/kirby-patrol

Kirby Patrol for Kirby 4

安装: 19

依赖: 0

建议者: 0

安全: 0

星星: 4

观察者: 2

分支: 0

开放问题: 0

类型:kirby-plugin

1.1.1 2024-06-28 21:56 UTC

This package is auto-updated.

Last update: 2024-08-28 22:34:26 UTC


README

Kirby Patrol Logo

Build Status Total Downloads Latest Stable Version License

Kirby Patrol

一个简单且可定制的网站页面访问管理方式,根据Kirby面板界面中分配给用户的角色来管理。

概述

安装

下载

下载并将此存储库复制到 /site/plugins/kirby-patrol

Composer

composer require beebmx/kirby-patrol

使用

默认情况下,您不需要做任何操作即可开始使用(除了安装之外),但如果您需要自定义默认行为,有一些选项可以个性化 Kirby Patrol

面板

所有具有面板访问权限的用户将看到新区域,并能够更新网站页面上的访问权限。

如果您需要限制这种行为,可以在用户YAML文件中添加权限

title: Editor

permissions:
  beebmx.kirby-patrol:
    access: false

注意

默认情况下,access 设置为 true

新面板区域中显示的页面将是所有 site 子项已发布的(状态为 listedunlisted)和每个页面内部的两级。如果您需要特定的页面集合,您可以通过在 config.php 文件中的 query 选项来更改它

use Kirby\Cms\App;
use Kirby\Cms\Pages;
use Kirby\Cms\Site;

'beebmx.kirby-patrol' => [
    'content' => [
        'query' => function (Site $site, Pages $pages, App $kirby) {
            return $site->find('secure-page')->children()->listed();
        },
    ],
],

如果您需要更新显示页面的 depth,请更新 config.php 文件

'beebmx.kirby-patrol' => [
    'content' => [
        'depth' => 3,
    ],
],

以下是 Kirby Patrol 视图页面的示例

Patrol panel example

前端

当登录用户访问任何页面时,Kirby Patrol 将自动验证请求。如果用户有权访问访问的页面,他们可以正常查看内容,如果没有,则会抛出一个状态码为 401 的错误页面。

警告

当验证发生时,您使用的是登录用户,否则将抛出错误。如果默认

中间件

即使 Kirby Patrol 尝试验证用户,也可能不足以满足您自己的验证需求。在这种情况下,您可以为每个页面自定义并添加额外的限制。

中间件过程由 Kirby Middleware 驱动,并且如果需要,您可以使用所有功能。

闭包中间件

添加额外验证的最简单方法是通过 Closures。在 config.php 文件中添加此内容

use Kirby\Http\Response;
use Beebmx\KirbyMiddleware\Request;

'beebmx.kirby-patrol' => [
    'permissions' => [
        'middleware' => [
            function (Request $request, Closure $next) {
                if(page($request->path())->is('secure-page')) {
                    return Response::redirect('login')
                }

                return $next($request);
            },
        ],
    ],
],

如您所见,Closure 需要两个参数:一个名为 $requestRequest 和一个名为 $nextClosure$request 包含来自 Patrol 和任何其他触发中间件的先前验证堆栈。

第二个参数 $next,您应在过程结束时调用它以使用 $request 继续到下一个验证。

注意

您可以返回一个 Response::class 对象。当您这样做时,Kirby Patrol 将自动发送请求。

类中间件

如果您自己的验证比简单的 Closure 更复杂,您可以使用自定义类来达到此目的

'beebmx.kirby-patrol' => [
    'permissions' => [
        'middleware' => [
            MyCustomMiddleware::class,
        ],
    ],
],

并且您的类应该看起来像

use Beebmx\KirbyMiddleware\Request;
use Closure;
use Kirby\Cms\App;
use Kirby\Exception\ErrorPageException;

class MyCustomMiddleware
{
    public function handle(Request $request, Closure $next)
    {
        $kirby = App::instance();

        if ($kirby->site()->isDisabled()->toBool()) {
            return throw new ErrorPageException([
                'fallback' => 'Unauthorized',
                'httpCode' => 401,
            ]);
        }

        return $next($data);
    }
}

您的中间件逻辑应位于 handle 方法中;否则,中间件永远不会被触发。

注意

您可以根据需要抛出一个带有自定义数据的异常 ErrorPageException::class

重定向

有时,您的网站中不需要错误来显示错误,在这种情况下,您可以进行重定向。

'beebmx.kirby-patrol' => [
    'permissions' => [
        'redirect' => 'login',
    ],
],

如您所见,当设置了重定向时,您无需自定义额外的 middleware

工具

您有可用的工具可以集成到现有的工作流程中

用户工具

如果您想验证一个 user 是否可以访问给定的页面

user()->can($page)

注意

页面可以是 stringKirby\Cms\Page 对象

如果您想检索所有可访问或不可访问的页面

user()->patrol(bool)

注意

返回所有可访问页面的值为 true。返回所有不可访问页面的值为 false

页面工具

如果您想了解一个 pages 集合是否有访问权限

pages()->patrol(bool)

注意

返回所有可访问页面的值为 true。返回所有不可访问页面的值为 false

选项

以下是从 config.php 文件中完全使用选项的示例

use Beebmx\KirbyMiddleware\Request;
use Closure;

'beebmx.kirby-patrol' => [
    'name' => 'Profiles',
    'icon' => 'shield',
    'content' => [
        'columns' => 4,
        'depth' => 3,
        'query' => function (Site $site, Pages $pages, Kirby $kirby) {
            return $site->find('private-content')->children()->listed();
        },
    ],
    'permissions' => [
        'redirect' => 'login',
        'default' => true,
        'middleware' => [
            function (Request $request, Closure $next) {
                if(page($request->path())->id() === 'super-secret-page') {
                    return throw new ErrorPageException([
                        'fallback' => 'Unauthorized',
                        'httpCode' => 401,
                    ]);
                }

                return $next($request);
            },
        ]
    ],
],

路线图

  • 自定义钩子
  • 多语言支持
  • 访客支持

许可证

MIT 许可下发布。

致谢