指令开始监听扩展
通过 Filter_Plugin_Cmd_Begin 接口,可以在 Z-BlogPHP 的指令入口 zb_system/cmd.php 完成系统加载与权限检查之后、动作分发之前执行自定义逻辑,适合按 act 做访问控制、维护时段限制等场景。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_Cmd_Begin | 无 | cmd.php 的启动接口,可以在这里拦截各种 action |
完整案例
下例在凌晨维护时段只允许管理员执行任何动作,并把搜索动作限制为登录用户可用:
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
Add_Filter_Plugin('Filter_Plugin_Cmd_Begin', 'demoAPP_Cmd_Begin');
}
function demoAPP_Cmd_Begin()
{
global $zbp;
// 维护时段(凌晨 3-5 点)仅允许管理员提交动作
$hour = (int) date('G');
if ($hour >= 3 && $hour < 5 && !$zbp->CheckRights('admin')) {
$zbp->ShowError(6, __FILE__, __LINE__);
}
// 搜索动作仅对登录用户开放,防止被脚本批量抓取
if ($zbp->action == 'search' && !$zbp->user->ID) {
$zbp->ShowError(6, __FILE__, __LINE__);
}
}注意事项
- 触发位置在
zb_system/cmd.php中,此时$zbp->Load()已执行完毕、$zbp->CheckRights($zbp->action)的基础权限检查已通过,尚未进入switch ($zbp->action)的动作分发; - 接口没有参数,可通过
$zbp->action(或GetVars('act', 'GET'))获取当前动作名; - 此刻用户、配置、模板等系统功能已就绪,需要终止请求时可在回调中调用
$zbp->ShowError()或自行跳转; - 前台登录、发表评论、后台操作等所有经过 cmd.php 的请求都会触发本接口,回调逻辑务必保持轻量。