2013-04-02 75 views
-1

我已經對此進行了大量的挖掘,但是我一直無法弄清楚最好的方法是什麼。設置哪些頁面可以在CakePHP中訪問

我有一個員工管理系統,登錄的每個人都是「員工」,「主管」或「經理」。

目前,我顯示不同版本的頁面,取決於他們的排名。但是,如果手動輸入網址,普通「員工」仍然可以訪問他們不應該訪問的網頁。根據CakePHP的文檔,它說默認情況下所有頁面都受到限制,並且您必須授予每個頁面的訪問權限。但我沒有授予訪問權限,似乎所有頁面都可訪問。

頁面訪問的最佳方法是什麼? 謝謝!

編輯:這裏是AppController中的配置:

public $components = array(
     'DebugKit.Toolbar', 
     'Session', 
     'Auth' => array(
      'authenticate' => array(
       'Form' => array(
        'userModel' => 'Employee' 
       ) 
      ), 
      'loginAction' => array(
       'controller' => 'employees', 
       'action' => 'login', 
       //'plugin' => 'users' 
      ), 
      'loginRedirect' => array('controller' => 'employees', 'action' => 'dashboard'), 
      'logoutRedirect' => array('controller' => 'employees', 'action' => 'login'), 
      'authError' => 'You must be logged in to see that.' 
     ) 
    ); 

再有就是它總是被設置爲返回假isAuthorized()方法:

public function isAuthorized($user = null) { 
// Any registered user can access public functions 
/*if (empty($this->request->params['admin'])) { 
    return true; 
}*/ 

// Only admins can access admin functions 
/*if (isset($this->request->params['admin'])) { 
    return (bool)($user['role'] === 'admin'); 
}*/ 

// Default deny 
return false; 
} 
+0

如何驗證的用戶?你使用Auth嗎? – SomeSillyName

+0

是的,我在CakePHP 2中使用Auth。他們的系統角色或「等級」存儲在users表中。 –

+0

你可以顯示你的Auth設置代碼嗎? – SomeSillyName

回答

0

克里特兩個數據庫表

  1. 資源(id,controller,action)(這將包含控制器名稱和操作名稱。)
  2. 許可(roll_id,RESOURCE_ID)

isAuthorized()功能

  1. 如果卷是admin,然後返回true。
  2. 其他檢查以下內容。
  3. 使用$this->request->controller獲取當前控制器名稱。
  4. 使用$this->request->action獲取當前操作名稱。
  5. resources獲取resource_id當前控制器和操作表。
  6. 查詢記錄permission表中resource_idroll_id
  7. 如果存在記錄,則返回true。
  8. 否則在最後它默認返回false。
0

你的代碼中缺少這種在AppController.php

class AppController extends Controller { 

    public function isAuthorized($user) { 
     return true; 
    } 

    public function initialize() { 
     parent::initialize(); 

     $this->loadComponent('RequestHandler'); 
     $this->loadComponent('Flash'); 
     $this->loadComponent('Auth', [ 
      'authenticate' => [ 
       'Form' => ['fields' => ['username' => 'email']] 
      ], 
      'authorize' => ['Controller'], 
     ]); 

     //some other code here  
    } 
相關問題