• PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证


    权限验证

    1、登录控制器

    2、通过tp验证码类生成验证码图片

    3、在管理员模型增加登录验证规则

    4、后台中所有的控制器必须先登录才能访问

    思路:在访问任何一个控制器之前都判断一个session即可,=>增加一个父控制器验证Session

      

        让所有后台的控制器【除了Login控制器之外的】都继承自这个控制器

    5、在管理员访问后台的任何一个页面之前先到数据库中查看当前管理员所在的角色是否有权限访问这个页面

      在权限模型中增加此检查方法,在父类登录控制器中调用

      

    6、后台左侧只显示当前管理员有权限访问的按钮

    思路:取出当前管理员所拥有的前两级的权限,在左侧循环这些权限做为按钮!

    在权限模型中增加获取当前管理员权限的方法

    /******** 获取当前管理员所拥有的前两级的权限 ***********/
        public function getBtns()
        {
            // 先取出当前管理员所拥有的所有的权限
            $adminId = session('id');
            if($adminId == 1)
            {
                $priModel = M('privilege');
                $priData = $priModel->select();
            }
            else
            {
                // 取出当前管理员所在角色所拥有的权限
                $arModel = M('admin_role');
                $priData = $arModel->alias('a')
                ->field('DISTINCT c.id, c.pri_name,c.module_name,c.controller_name,c.action_name,c.parent_id')
                ->join ('LEFT JOIN __ROLE_PRI__ b ON a.role_id=b.role_id
                        LEFT JOIN __PRIVILEGE__ c ON b.pri_id=c.id')
                ->where(array(
                        'a.admin_id' => array('eq', $adminId),    
                ))->select();
            }
            /*************** 从所有的中选出前两级 *******************/
            $btns = array();        //前两级权限
            foreach ($priData as $k => $v)
            {
                if($v['parent_id'] == 0)
                {
                    //再找这个顶的子级
                    foreach ($priData as $k1 => $v1)
                    {
                        if($v1['parent_id'] == $v['id'])
                        {
                            $v['children'][] = $v1;
                        }
                    }
                    $btns[] = $v;
                }
            }
            return $btns;
        }

     在menu.html中使用四维函数输出

     

    7、在管理员模型增加一个退出账号功能 => 删除session

     

     

  • 相关阅读:
    Ghost Button制作教程及设计趋势分析
    onhashchange事件--司徒正美
    window.location.hash属性介绍
    优质UI的7条准则(一)
    当在浏览器地址栏输入一个网址的时候,究竟发生了什么?
    全球最快的JS模板引擎
    眨眼登录表单
    DIV+CSS规范命名
    es6--export,import
    es6--class
  • 原文地址:https://www.cnblogs.com/zixuanfy/p/7134344.html
Copyright © 2020-2023  润新知