限制索引视图,但允许在CakePHP中编辑?

时间:2012-03-27 03:46:22

标签: cakephp authorization cakephp-2.0

所以我想隐藏某些未登录的人的视图,并希望允许某个用户角色进行编辑/删除等。

但是使用Auth-> allow和isAuthorized有点令人困惑。有没有办法简化以下内容?

我想允许某个角色(教练和管理员)查看索引和视图,并将其完全隐藏起来。

public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('index', 'view');
}

public function isAuthorized($user) {
    if (in_array($this->action, array('edit', 'delete'))) {
        if ($user['id'] != $this->request->params['pass'][0]) {
            return false;
        }
    }
    return true;
}

2 个答案:

答案 0 :(得分:0)

您可以从会话中获取当前用户

在视图(* .ctp)中呈现一些部分元素

<?php
$user = $this->session->read('Auth.User')

if(!$user){
    echo $this->element('logmein');
}else{
    echo $this->element('logmeout')
?>
<h2>Here is member section</h2>
<?php
//... do some thing for member
}
?>

答案 1 :(得分:0)

$this->Auth->allow('index', 'view');
in beforeFilter()告诉蛋糕任何人都可以查看索引&amp;查看行动,无论他们是否已登录。

您必须在isAuthorized()中执行测试,并在那里测试操作是否可以由用户执行。如果当前用户可以执行操作($ this-&gt;操作),则返回true;如果不能执行操作,则返回false。

public isAuthorized($user = null) {

  switch($this->action) {

    case "index":
    case "view":

      if ($user['role'] == 'admin') {

        return true;

      }

      break;

    case "edit":
    case "delete":

      if ($user['id'] == $this->request->params['pass'][0]) {
        return true;
      }   

      break;

   }

   return false;

}

有关详细信息,请参阅http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html#using-controllerauthorize