yii 2011-03-15 17:49:43 4479次浏览 15条回复 1 0 0

如何给当前用户只做自己的操作,也就说不能修改别人的资料,请舰长指教。:P

  • 回复于 2011-03-15 18:44 举报

    此网站的教程和扩展版本正好用到了,分享给你!
    控制器代码:

    $model=$this->loadModel($id);
    if($model->user_id != Yii::app()->user->id)
    throw new CHttpException(403,'您没有权限访问!');
    

    如果没有权限访问,就抛出一个403状态的异常!

  • 回复于 2011-03-15 18:48 举报

    太感谢了

  • 回复于 2011-03-15 18:51 举报

    如果对控制器全局有效的话,你可以加到init()方法里!视情况而定,可能不是最好的方法,但我感觉这种方法比较简单,另外,yii的rbac也有基于角色的权限,你可以研究一下CAuthManager的roles属性!

  • 回复于 2011-03-15 19:02 举报

    还有个方法,是在accessRules里面设置expression属性!这个任务交给你了!

  • 回复于 2011-03-20 15:10 举报
    public function accessRules()
    {
      return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
          'actions'=>array('index','view'),
          'users'=>array('*'),
        ),
      array('allow', // allow authenticated user to perform 'create' and 'update' actions
        'actions'=>array('create','admin'),
        'users'=>array('@'),
      ),
      array('allow', // allow authenticated user to perform 'create' and 'update' actions
        'actions'=>array('update','delete'),
        'expression'=>array($this,'foo'),
      ),
      array('deny',  // deny all users
        'users'=>array('*'),
      ),
      );
    }
    
    protected function foo($user)
    {
      return $user->id==$this->loadModel($_GET['id'])->user_id;
    }
    

    以上是使用expression的具体代码,如果大家有更好的办法,继续跟帖!

  • 回复于 2011-03-22 21:48 举报
    'expression'=>array($this,'foo'),
    

    foo是什么意思呢? 这个表达式的书写规则是什么

  • 回复于 2011-03-22 21:53 举报
    'expression'=>array($this,'foo'),
    

    $this是当前类,如果是其它类,这里写类名。
    foo是当前的方法,返回值是boolen类型的。
    foo方法的$user相当于

    Yii::app()->user。
    
  • 回复于 2011-03-22 21:54 举报

    你刚才那是引用吗?怎么多一个网址?

  • 回复于 2011-03-22 22:26 举报

    不是引用,是楼号~点了以后会有链接出来

  • 回复于 2011-03-22 22:28 举报

    这样来说 foo 是一个关键字么
    还是说要写入当前方法的名字。。

    另外,您指的‘方法’是不是就是当前的action?

  • 回复于 2011-03-22 22:30 举报

    不是action,是当前类的方法

  • 回复于 2011-03-22 22:31 举报

    原来如此啊,呵呵。。

  • 回复于 2011-03-22 22:36 举报

    调用类方法来验证???

  • 回复于 2011-03-22 22:37 举报

    嗯,你试一下就明白了

  • 回复于 2011-03-22 22:51 举报

    关于accessrule设置的问题!
    总结并翻译了一下 规则设定的内容.

您需要登录后才可以回复。登录 | 立即注册