本文最后由 森林生灵 于 2017/08/25 10:29:54 编辑
已知 Z-Blog 的权限设置的切入点 Filter_Plugin_Zbp_CheckRights ,但在其官方 WiKi 中搜索却什么说明也没有。为了更直观的了解系统群组的权限机制最好先安装一下 Z-Blog 角色分配器(Howl) 插件 https://app.zblogcn.com/?id=235 ,通过此插件我们可以直观的看到 Z-Blog 系统共有 6 个级别的群组,按权限高低依次为管理员组、网站编辑组、作者组、协作者组、评论者组、游客组,其相对应的权限级别依次为 1、2、3、4、5、6。
2017.8.25 更新:由于 Z-Blog 角色分配器(Howl) 插件也是切入点也是 Filter_Plugin_Zbp_CheckRights ,新权限设定此切入点在某种情况下会使得此插件失效,故新权限设定的切入点应先于 Filter_Plugin_Zbp_CheckRights 才可以,此处应使用 Filter_Plugin_Zbp_Load_Pre 设定新权限。
RegisterPlugin('Demo', 'ActivePlugin_Demo');
function ActivePlugin_Demo() {
Add_Filter_Plugin('Filter_Plugin_Zbp_Load_Pre', 'Demo_Zbp_Load_Pre');
Add_Filter_Plugin('Filter_Plugin_Cmd_Begin', 'Demo_Cmd_Begin');
Add_Filter_Plugin('Filter_Plugin_Login_Header', 'Demo_Login_Header');
}
function Demo_Zbp_Load_Pre() {
global $zbp, $actions;
// 操作名称,最大权限等级( 6 代表游客组所拥有的权限),操作简介
$arr = array(
array('action' => 'LostPWD', 'level' => 6, 'lang' => '忘记密码'),
array('action' => 'SignUp', 'level' => 6, 'lang' => '用户注册'),
);
foreach ($arr as $key => $value) {
$actions[$arr[$key]['action']] = $arr[$key]['level'];
$zbp->lang['actions'][$arr[$key]['action']] = $arr[$key]['lang'];
}
}
function Demo_Cmd_Begin() {
global $zbp;
switch (GetVars('act', 'GET')) {
// 忘记密码表单
case 'LostPWD':
// 访问 http://localhost/zblogphp/zb_system/cmd.php?act=LostPWD 时跳转
Redirect('login.php?act=LostPWD');
break;
// 用户注册表单
case 'SignUp':
//访问 http://localhost/zblogphp/zb_system/cmd.php?act=SignUp 时跳转
Redirect('login.php?act=SignUp');
break;
default:
break;
}
}
function Demo_LostPassword_Form() {
global $zbp;
// 鉴权,看当前用户所在群组是否有权执行 LostPWD 操作
if (!$zbp->CheckRights('LostPWD')) {
$zbp->ShowError(6);
die();
}
###
}
function Demo_SignUp_Form() {
global $zbp;
// 鉴权,看当前用户所在群组是否有权执行 SignUp 操作
if (!$zbp->CheckRights('SignUp')) {
$zbp->ShowError(6);
die();
}
###
}
function Demo_Login_Header() {
global $zbp;
// 拦截 login.php 登录页
$action = GetVars('act', 'GET');
switch ($action) {
// 重置密码表单
case 'LostPWD':
Demo_LostPassword_Form();
break;
// 用户注册表单
case 'SignUp':
Demo_SignUp_Form();
break;
default:
echo '';
}
}
function InstallPlugin_Demo() {
global $zbp;
###
}
function UninstallPlugin_Demo() {
global $zbp;
###
}