۰۵
فروردين ۹۴
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 مشکلی نداشته باشید
۹۴/۰۱/۰۵