Hey :)
Tout d'abords d'avance, désolé pour la création de ce post (il y en a beaucoup sur les ACL) mais dans mon cas je suis bloqué, j'essaye de comprendre un maximum mais impossible d'initialisé correctement la classe ACL .
Ce qui est bien et qui marche :
J'ai configuré le route Admin, avec Auth j'ai aucun soucis (sauf que tout le monde peux y accédé du coup ^^) .
La route Admin renvoie sur la vue admin_index du controller User (ce que je veux en attendant que je fasse un beau dashboard) .
J'essaye ACL, avec un User (CREAZ qui appartient au groupe 1 => Admin) .
Quand je tape http://127.0.0.1/ACL/admin, je tombe sur http://127.0.0.1/ACL/users/login (OK)
Je me connecte avec mon compte admin, cela me renvoie sur l'accueil (je préfèrerais directement sur l'admin pour le groupe 1 /admin et les autres renvoie sur l'accueil) .
Une fois connecté, je tape http://127.0.0.1/ACL/admin et ...
Missing Controller
Error: ACLController could not be found.
Error: Create the class ACLController below in file: app\Controller\ACLController.php
Que faire ? ^^
Merci de votre aide
UsersController :
<?php
App::uses('AppController', 'Controller');
class UsersController extends AppController {
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('initDB');
}
public function initDB() {
$group = $this->User->Group;
// Pour les admins
$group->id = 1;
$this->Acl->allow($group, 'controllers');
// Permet aux utilisateurs classiques de se déconnecter
$this->Acl->allow($group, 'controllers/users/logout');
}
public function login() {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Invalid username or password, try again'));
}
}
public function logout() {
$this->Session->destroy();
$this->redirect($this->Auth->logout());
}
function admin_index()
{
$this->User->recursive = 0;
$this->set('users', $this->paginate());
}
}
?>
routes.php
* Here, we are connecting '/' (base path) to controller called 'Pages',
* its action called 'display', and we pass a param to select the view file
* to use (in this case, /app/View/Pages/home.ctp)...
*/
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
/**
* ...and connect the rest of 'Pages' controller's URLs.
*/
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/admin', array('controller' => 'users', 'action' => 'index', 'prefix' => 'admin'));
AppController
<?php
class AppController extends Controller {
public $components = array(
'Acl',
'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
)
),
'Session'
);
public $helpers = array('Html', 'Form', 'Session');
public function beforeFilter() {
//Configure AuthComponent
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'pages', 'action' => 'display', 'home');
if(isset($this->params'prefix']) && $this->params'prefix'] == 'admin')
{
$this->layout = 'admin_default';
}
}
}
?>
PagesController
public function beforeFilter() {
parent::beforeFilter();
// On rend accessible la page home
$this->Auth->allow(array('controller' => 'pages', 'action' => 'display', 'home'));
}
public function display() {
$path = func_get_args();
$count = count($path);
if (!$count) {
return $this->redirect('/');
}
$page = $subpage = $title_for_layout = null;
if (!empty($path[0])) {
$page = $path[0];
}
if (!empty($path[1])) {
$subpage = $path[1];
}
if (!empty($path$count - 1])) {
$title_for_layout = Inflector::humanize($path$count - 1]);
}
$this->set(compact('page', 'subpage', 'title_for_layout'));
try {
$this->render(implode('/', $path));
} catch (MissingViewException $e) {
if (Configure::read('debug')) {
throw $e;
}
throw new NotFoundException();
}
}
}
User.php (Modèle)
<?php
App::uses('AuthComponent', 'Controller/Component');
class User extends AppModel {
public $belongsTo = array('Group');
public $actsAs = array('Acl' => array('type' => 'requester'));
public function parentNode() {
if (!$this->id && empty($this->data)) {
return null;
}
if (isset($this->data'User']'group_id'])) {
$groupId = $this->data'User']'group_id'];
} else {
$groupId = $this->field('group_id');
}
if (!$groupId) {
return null;
} else {
return array('Group' => array('id' => $groupId));
}
}
public function beforeSave($options = array()) {
$this->data'User']'password'] = AuthComponent::password($this->data'User']'password']);
return true;
}
}
?>