Auth Component: gestione dei permessi semplice e immediata
Una volta autenticato un utente si può facilmente controllare il suo operato intercettando ogni azione eseguita all’interno dell’applicazione senza ricorrere alle ACL.
Si possono definire controller/action per le quali non richiedere l’autenticazione definendo il valore dell’attributo
$allowedActions = array('pages'=>'display')
oppure impostandolo dinamicamente attraverso il metodo
$this->Auth->allow(array('pages'=>'display', 'users'=>'index'));
Per determinare il tipo di controllo sulle autorizzazioni da eseguire bisogna impostare l’attributo $this->Auth->authorize che può assumere i seguenti valori:
- controller l’autorizzazione per accedere all’action richiesta è concessa dal metodo Controller::isAuthorized() che deve essere implementato
- actions esegue un controllo dell’action richiesta richiamando il metodo AclComponent::check(), quindi richiede l’impiego delle ACL.
- crud esegue la validazione delle mapActions usando il metodo AclComponent::check()
- array(‘model’=> ‘name’) esegue la validazione della mapActions usando il metodo model $name::isAuthorize(user, controller, mapAction)
- object esegue la validazione di Controller::action usando object::isAuthorized(user, controller, action)
Controller
Quando si imposta $this->Auth->authorize to ‘controller’, Auth component cercherà un’action chimata ‘isAuthorized’ per sapere se un utente è autorizzato o meno. Come nell’esempio che segue.
function isAuthorized() {
if (isset($this->params[Configure::read('Routing.admin')])) {
if ($this->Auth->user('admin') == 0) {
return false;
}
}
return true;
}
















Per quanto rigurarda questa forma di definizione di pagine escluse dal sistema di controllo di login
$this->Auth->allow(array('pages'=>'display', 'users'=>'index'));Non è possibile specificare solo il controller? Una cosa tipo array(‘pages’ => ‘*’); ?
No, perchè il controllo che viene fatto al momento della concessione è il seguente
$isAllowed = (
$this->allowedActions == array('*') ||
in_array($controller->params['action'], $this->allowedActions)
);
Quindi richiede necessariamente un elemento con controller/azione.