为Z-Blog群组设置新权限

本文最后由 森林生灵 于 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 设定新权限。

    Z-BlogPHP权限机制

    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 '<script>alert("伪造请求已被拦截!");</script>';
        }
    }
    
    function InstallPlugin_Demo() {
        global $zbp;
       
        ###
    
    }
    
    function UninstallPlugin_Demo() {
        global $zbp;
    
        ###
    
    }


    本文标题:为Z-Blog群组设置新权限
    本文链接:https://www.lanseyujie.com/post/set-new-permissions-for-zblog-system-group.html
    版权声明:本文使用「署名 4.0 国际」创作共享协议,转载或使用请遵守署名协议。
    点赞 0 分享 0