Ограничить просмотр индекса, но разрешить редактирование в CakePHP? - PullRequest
0 голосов
/ 27 марта 2012

Поэтому я хочу скрыть определенное представление от людей, которые не вошли в систему и хотят разрешить редактирование / удаление определенной роли пользователя и т. Д.

Но использование 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 голосов
/ 27 марта 2012
$this->Auth->allow('index', 'view');

в beforeFilter () сообщает, что любой может просматривать индекс и просматривать действия независимо от того, вошли они в систему или нет.

Вы должны выполнить свои тесты в isAuthorized () и проверить там, может ли пользователь выполнить действие или нет. Вернуть true, если текущее пользователь может выполнить действие ($ this-> action), или 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

0 голосов
/ 27 марта 2012

Вы можете получить текущего пользователя из сеанса

для визуализации некоторого частичного элемента в вашем представлении (* .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
}
?>
...