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

时间: 2024-08-10 07:17:09

PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证的相关文章

PHP.46-TP框架商城应用实例-后台21-权限管理-权限和角色的关系

权限和角色的关系 权限功能 角色功能 权限与角色的关联要通过权限-角色表进行{多对多} /********* 角色-权限表 *********/ drop if exists p39_role_pri; create table p39_role_pri ( pri_id mediumint unsigned not null comment '权限Id', role_id mediumint unsigned not null comment '角色Id', key pri_id (pri_i

PHP.36-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改

商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在修改页面edit.html中显示对应扩展分类foreach,类似添加页面 注:考虑当没有扩展分类时的显示,使用if($gcData) 3.在模型类GoodsModel.class.php/_before_update()中处理扩展分类,先删除原数据,再插入新数据[多对多时,通常的用法] <?php

PHP.47-TP框架商城应用实例-后台22-权限管理-角色和管理员的关系

角色和管理员的关系 角色功能 管理员功能 角色与管理的关联要通过管理-角色表进行{多对多} /********* 管理-角色表 *********/ drop if exists p39_admin_role; create table p39_admin_role ( admin_id mediumint unsigned not null comment '管理Id', role_id mediumint unsigned not null comment '角色Id', key admin

PHP.25-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图

添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace Admin\Controller; use Think\Controller; //后台添加商品功能控制器 class GoodsController extends Controller { //显示和处理表单 public function add() { //判断用户是否提交了表单(如果提交了,就

PHP.28-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码

Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字段必须有中文名,则Gii在生成代码时才能识别某字段的中文名是什么: 2.某字段验证规则不能为空:设置该建表字段为not null:一般所有字段都为not null,若不希望生成验证规则,则加上默认值default(默认值可为空): 3.生成上传图片代码:字段名中需包含logo|image|pic|f

PHP.29-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新

商品表修改功能 1.页面优化,类似添加页面 1 <layout name="layout" /> 2 3 <div class="tab-div"> 4 <div id="tabbar-div"> 5 <p> 6 <span class="tab-front" >通用信息</span> 7 <span class="tab-back&quo

PHP.39-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除

 添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性表p39_goods_attr{id,attr_value,attr_id,goods_id} /********商品属性表[多对多:一个属性可以有多个值,一个商品可以有多个属性,一个属性可以对应多个商品]*******/ drop if exists p39_goods_attr; create

PHP.31-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)

商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete:删除前的操作 protected function _before_delete($option) { $id = $option['where']['id']; //要删除的商品的ID /***********删除商品相片********/ //先查询出原商品相册的路径 $gpModel = M(

PHP.43-TP框架商城应用实例-后台16-商品属性3-库存量管理

库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_number,goods_str_id[商品属性id]} drop if exists p39_goods_number; create table p39_goods_number ( goods_id mediumint unsigned not null comment '商品Id', goods