beebmx / kirby-patrol
Kirby Patrol for Kirby 4
Requires
- php: ^8.2
- beebmx/kirby-middleware: ^1.0
- getkirby/composer-installer: ^1.1
Requires (Dev)
- getkirby/cms: ^4.2
- laravel/pint: ^1.10
- pestphp/pest: ^2.0
- spatie/ray: ^1.40
README
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
子项已发布的(状态为 listed
和 unlisted
)和每个页面内部的两级。如果您需要特定的页面集合,您可以通过在 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
视图页面的示例
前端
当登录用户访问任何页面时,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
需要两个参数:一个名为 $request
的 Request
和一个名为 $next
的 Closure
。$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)
注意
页面可以是 string
或 Kirby\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 许可下发布。
致谢
- Fernando Gutierrez @beebmx
- jonatanjonas
logo
- 所有贡献者