Temat: autoryzacja w wszystkich kontrolerach, app_controller.php
Witam,
robię właśnie pewien studencki projekt w cakePHP i jest to moje pierwsze spotkanie z tym frameworkiem, dlatego proszę o wyrozumiałość jeśli pytanie jest zbyt banalne (choć sądząc z ilości narzekań jakie zwraca google po wpisaniu czegoś w stylu "cakePHP, Auth, ACL" nie koniecznie takie banalne).
Korzystam z cakePHP 1.3.0 i mam problem z autoryzacją przy użyciu komponentu Auth (Auth, nie ACL bo ACL chyba jest na tym etapie dla mnie za trudne, a to tylko studencki projekt). Autoryzacja ma dotyczyć wszystkich kontrolerów dlatego w folderze "app" kejka dodałam plik app_controller.php dodając wewnątrz klasy następujące akcje:
var $components = array('Auth');
function beforeFilter () {
Security::setHash("md5");
$this->Auth->userModel='Resident';
$this->Auth->loginAction = array('controller'=>'Resident', 'action'=>'login');
$this->Auth->allow('*');
$this->Auth->loginRedirect=array('controller'=>'Resident', 'action'=>'login');
$this->Auth->logoutRedirect=array('controller'=>'Resident', 'action'=>'login');
$this->Auth->loginError = 'Błąd logowania';
//$this->Auth->authorize='controller';
parent::beforeFilter();
}
function login() {}
function logout () {
$this->Session->setFlash('Wylogowany');
$this->redirect($this->Auth->logout());
}
function isAuthorized() {
if ($this->Auth->user('typ')!='admin') {
$this->Auth->deny('add', 'edit', 'delete');
}
}W mojej bazie danych nie ma tabeli users, podobne funkcje pełni tabela residents, z tąd "$this->Auth->userModel='Resident'". Do haszowania chcę użyć funkcji MD5 ponieważ moja aplikacja ma współpracować z wykonanym przez kolegę, w czystym PHP, forum korzystającym z tej samej tabeli residents (wspólny projekt, dwa dość niezależne moduły). Pozatym nie chcę żeby cake do zapisu haseł używał jakiegoś salt, bo będą problemy z współpracą z wspomnianym forum. Na tym etapie nie precyzuję jeszcze jaki użytkownik ma mieć dostęp do których akcji ("$this->Auth->allow('*')"), bo na razie mam większy problem. Mimo użycia "$this->Auth->userModel='Resident'" otrzymuję komunikaty: "Error: UsersController could not be found.", nie rozumiem dlaczego i co muszę poprawić. Autoryzacja i podział na część dostępną dla użytkowników z tabeli residents, których typ=admin i tych z typ=mieszkaniec to ostatnia rzecz jaka została mi do dokończenia w tym projekcie dlatego naprawdę nie chcę zmieniać nazwy tabeli (kolega musiałby też w takim przypadku poprawiać forum, nieciekawa sytuacja
). Nie mam jeszcze zbyt wiele doświadczenia z cakePHP, a szczerze mówiąc tak na prawdę dopiero uczę się programować wogóle więc może po prostu robię gdzieś jakiś prosty błąd.
W kontrolerze residents_controller.php mam jeszcze takie akcje związane z autoryzacją:
function beforeFilter() {
if ($this->data['Resident']['password']) {
$this->data['Resident']['password'] = md5($this->data['Resident']['password']);
}
return true;
}
function userloged() {
$userData = $this->Auth->user();
$this->set('userData', $userData);
}
function login() {}
function logout () {
$this->Session->setFlash('Wylogowany');
$this->redirect($this->Auth->logout());
}Właściwie nie wiem gdzie umieścić akcje login i logout, w app_controller.php czy residents_controller.php? Nie wiem też gdzie umieścić widok dla logowania, na razie wrzuciłam go do widoków dla residents_controller.php. Widok dla logowania wygląda tak:
<div class="login">
<h2>Login</h2>
<?php echo $form->create('User', array('action' => 'login'));?>
<?php echo $form->input('username');?>
<?php echo $form->input('password');?>
<?php echo $form->submit('Login');?>
<?php echo $form->end(); ?>
</div>To moja pierwsza próba zrobienia jakiejkolwiek autoryzacji w cakePHP i nie dziwiłyby mnie błędy składniowe itp. ale komunikat o brakującym kontrolerze?...
Proszę o jakieś wskazówki, jak rozwiązać mój problem. Czekam niecierpliwie ![]()