码迷,mamicode.com
首页 > 其他好文 > 详细

YII 访问控制

时间:2014-10-26 21:18:47      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   使用   for   

系统后台:用户登录、后台首页面、商品列表、添加商品、修改商品

 

后天的一些页面在用户没有登录系统的时候是不允许访问的,例如 商品列表添加商品修改商品

 

有一些页面无论用户是否登录系统,都是可以访问的,例如 用户登录

后台代码:

<?php
/**
 * 后台商品管理控制器 
 */
class GoodsController extends Controller {
    /*
     * 在当前控制器实现用户访问的控制
     */
    function filters() {
        return array(
            'accessControl',
        );
    }
    
    /*
     * show  add  update  del 等方法在进行访问的时候需要用户登录系统
     * 为具体方法被访问设置条件
     */
    function accessRules() {
        return array(
            //用户访问控制扩展
            //add 方法可以被无条件访问(无论登录与否都可以访问)
            array(
                'allow',
                'actions'=>array('add'),
                'users'=>array('*'), //什么用可以访问
            ),
            
            //具体指定"用户"可以删除信息
            //linken zhangsan  lisi 这个三个用户都可以进行删除操作
            array(
                'allow',
                'actions'=>array('del'),
                'users' => array('linken','zhangsan','lisi'),
            ),
            
            //匿名用户操作 ?
            //有的控制器是匿名用户可以访问,已经登录系统用户是禁止访问的
            //update  这个方法是匿名用户可以访问
            array(
                'allow',
                'actions'=>array('update'),
                'users'=>array('?'),
            ),
            
            //show 必须是登录系统的用户来访问
            array(
                'allow',
                'actions'=>array('show'),
                'users'=>array('@'),
            ),
            array(
                'deny',
                'users'=>array('*'),
            ),
        );
    }
    
    /*
     * 商品展示
     */
    function actionShow(){
        //通过模型model实现数据表信息查询
        //产生模型model对象
        $goods_model = Goods::model();
        
        //通过model模型对象调用相关方法帮我们查询数据
        //$goods_infos = $goods_model -> find();  //每次只可以查询一条商品信息
        //echo $goods_infos->goods_name,"<br />";
        //echo $goods_infos->goods_price,"<br />";
        
        //获得全部商品信息findAll()
        $goods_infos = $goods_model -> findAll();
        //获得全部商品名字的信息
        //foreach($goods_infos as $_v){
            //$_v就是遍历出来的具体对象
        //    echo $_v->goods_name,"----",$_v->goods_price,"<br />";
        //}
        
        //通过具体sql语句获得商品信息findAllBySql()
        //$sql = "select goods_id,goods_name,goods_price,goods_create_time from {{goods}} limit 10";
        //$goods_infos = $goods_model ->findAllBySql($sql);
        
        //var_dump($goods_infos);
        
        //把获得数据信息传递到视图模板里边
        //renderPartial('视图名字',传递的变量信息);
        //renderPartial('show',array('名字'=>值,'名字'=>值));
        //名字:是视图使用的变量名字
        //值:当前被传递变量的值
        
        $this ->renderPartial('show',array('goods_infos'=>$goods_infos));
    }
    
    /*
     * 建立一个测试方法,实现商品数据分页显示
     */
    function actionShow1(){
        //获得数据模型
        $goods_model = Goods::model();
        
        //1.获得商品总的记录数目
        $cnt = $goods_model -> count();
        $per = 6;
        
        //2. 实例化分页类对象
        $page = new Pagination($cnt, $per);
        
        //3. 重新按照分页的样式拼装sql语句进行查询
        $sql = "select * from {{goods}} $page->limit";
        $goods_infos = $goods_model -> findAllBySql($sql);
        
        //4. 获得分页页面列表(需要传递到视图模板里边显示)
        $page_list = $page->fpage(array(3,4,5,6,7));
        
        
        //调用视图模板,给模板传递数据
        $this ->renderPartial('show',array('goods_infos'=>$goods_infos,'page_list'=>$page_list));
    }
    
    /*
     * 添加商品
     */
    function actionAdd(){
        $goods_model = new Goods();
        //echo "<pre>";
        //print_r($_POST);
        //echo "</pre>";
        
        //判断表单是否有提交过来数据
        //$_POST['Goods']其中Goods有个好处,可以在当前控制器接收多个表单信息,只要下标有区分就可以
        if(isset($_POST['Goods'])){
            //我们要把从表单提交过来的数据赋予$goods_model模型里边
            //$goods_model -> goods_name = $_POST['Goods']['goods_name'];
            //$goods_model -> goods_price = $_POST['Goods']['goods_price'];
            //$goods_model -> goods_number = $_POST['Goods']['goods_number'];
            //$goods_model -> goods_category_id = $_POST['Goods']['goods_category_id'];
            //$goods_model -> goods_brand_id = $_POST['Goods']['goods_brand_id'];
            //$goods_model -> goods_introduce = $_POST['Goods']['goods_introduce'];
            //$goods_model -> goods_weight = $_POST['Goods']['goods_weight'];
       Yii::beginProfile('addgoods'); 
            //上边代码优化,利用foreach遍历来优化
            foreach($_POST['Goods'] as $_k => $_v){
                $goods_model -> $_k = $_v;
            }
            $goods_model -> goods_create_time = time();
            
            //调用save()方法实现数据添加
            if($goods_model -> save()) {
                //设置添加商品成功提示信息
                Yii::app()->user->setFlash('success','添加商品成功');
                //信息添加成功后实现页面重定向(商品列表页面)
                //$this -> redirect('./index.php?r=houtai/goods/show');
            }
         Yii::endProfile('addgoods');
        }
        
        $this ->renderPartial('add',array('goods_model'=>$goods_model),false,true);
    }
    
    /*
     * 修改商品
     * 当前这个方法在执行的时候需要get方式传递id信息
     * 如果没有id信息则此方法是不允许访问的
     */
    function actionUpdate($id){
        //我们具体修改哪个商品,需要将其信息查询出来
        //我们需要知道哪个商品被修改,把商品的id信息通过get方式传递过来
        //接收被修改商品id信息
       
        //根据$id查询被修改商品信息
        $goods_model = Goods::model();  //除了添加(new Goods)数据我们都使用Goods::model()来实例化模型对象
        $goods_info = $goods_model -> findByPk($id);
        
        //修改逻辑与添加逻辑基本一致,创建表单、收集数据、赋予模型、调用save方法
        //修改的时候,数据也是赋予数据模型对象里边了
        //$goods_info数据模型里边有一些旧的信息,新的信息覆盖旧的信息
        if(isset($_POST['Goods'])){
            foreach($_POST['Goods'] as $_k => $_v){
                $goods_info -> $_k = $_v;
            }
            
            if($goods_info -> save())
                $this -> redirect('./index.php?r=houtai/goods/show');
        }
        //创建数据模型model对象
        //new  Goods()  ;   调用save方法的时候给我们执行insert语句
        //Goods::model();    调用save方法的时候执行update语句
        
        //$goods_info是我们查询出来的被修改商品的信息,同时也是数据模型对象
        //把$goods_info传递到视图模板里边。
        
        $this ->renderPartial('update', array('goods_model'=>$goods_info));
    }
    
    /*
     * 删除商品信息
     * 删除商品信息与修改类似,通过get方式传递被删除商品信息id
     */
    function actionDel($id){
        echo $id,"has deleted";exit;
        //根据$id将被删除商品的数据模型对象获得到,通过该对象调用 delete 方法即可删除数据
        $goods_model = Goods::model(); //获得数据模型对象
        $goods_info = $goods_model -> findByPk($id);  //获得被删除商品的模型对象
        //是谁($goods_info还是$goods_model)调用delete
        if($goods_info->delete())
            $this -> redirect('./index.php?r=houtai/goods/show');
     }
    
}

bubuko.com,布布扣

bubuko.com,布布扣

当用户没有登录时,默认跳转到登录页面,这个默认登录页面在哪里进行设置?

在main配置文件里面:

bubuko.com,布布扣


bubuko.com,布布扣

注意:

有的控制器方法被禁止访问(即使登录用户也如此),如果被访问,那么首先会询问用户是否是登录,如果用户已经登录系统,那么直接是403禁止访问。


定义用户权限:

* 全部用户(无论登录与否)

? 匿名用户

用户名,具体用户

@ 登录系统用户

bubuko.com,布布扣

用户访问控制两个符号:+  -

+  表示过滤器专门是针对哪个方法起作用

表示除了此方法,其他方法都会进行过滤

<?php

class DefaultController extends Controller
{
    /*
     * 用户访问控制过滤可以针对具体方法起作用
     */
    function filters() {
        return array(
            //+ 表示过滤器只针对具体方法起作用
            //'accessControl + f1,f2',
            
            //- 表示除了此方法,其他方法都会起作用
            //过滤器除了f1方法外,其他的都会起作用
            'accessControl - f1',
        );
    }
    
    function accessRules() {
        return array(
            array(
                'deny',
                'users'=>array('*'),
            ),
        );
    }
    
	public function actionIndex()
	{
		$this->render('index');
	}
        
        public function actionF1(){
            echo "I am F1";
        }
        public function actionF2(){
            echo "I am F2";
        }
        public function actionF3(){
            echo "I am F3";
        }
}


YII 访问控制

标签:style   blog   http   color   io   os   ar   使用   for   

原文地址:http://blog.csdn.net/buyingfei8888/article/details/40479077

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!