http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'posts',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'display',
'home'
),
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
)
)
);
استفاده از این روش مناسب است ولی روش های دیگر مانند فرار دادن در مدل و usercontoller نیز ممکن است
این دستور اجازه دسترسی بدون لاگین را می دهد
public function beforeFilter() {
parent::beforeFilter();
// Allow users to register and logout.
$this->Auth->allow('add', 'logout');
}
برای لاگین چند نفر یا با دسترسی های مختلف از دستور زیر استفاده میکنیم
// app/Controller/AppController.php
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'posts', 'action' => 'index'),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'display',
'home'
),
'authenticate' => array(
'Form' => array(
'passwordHasher' => 'Blowfish'
)
),
'authorize' => array('Controller') // Added this line
)
);
public function isAuthorized($user) {
// Admin can access every action
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
// Default deny
return false;
}
isAuthorized
این تابع باید متناسب با مسئله تغییر یابد
می توانیم در هر کنترلری یک تابع همانند این داشته باشم
// app/Controller/PostsController.php
public function isAuthorized($user) {
// All registered users can add posts
if ($this->action === 'add') {
return true;
}
// The owner of a post can edit and delete it
if (in_array($this->action, array('edit', 'delete'))) {
$postId = (int) $this->request->params['pass'][0];
if ($this->Post->isOwnedBy($postId, $user['id'])) {
return true;
}
}
return parent::isAuthorized($user);
}
به این نکته دفت کنید که از این تابع استفاده نمایید
function beforeFilter() {
parent::beforeFilter();
}
تا برای تعریف مجدد تابع isauthorized مشکلی نداشته باشید