第一次使用有什麼問題? 你設置 auth.php 文件,它有規則 - 沒問題.
實際上當你逐漸使用的時候你會發現很多問題.
讓我們來先看一下 CPhpAuthManager::assign 方法。從下面這段來開始了解:
$this->_assignments[$userId][$itemName]
向某個用戶分配角色,它將添加到現有的分配(assignments),用戶 ID 作為鍵。我們可以使用一下方法來檢查是否分配:
isset($this->_assignments[$userId][$itemName])
現在你看到的代碼中沒有 session,所以如果你沒有保存,用戶下一次訪問其他頁面的時候將會沒有角色.
所以你應該在角色分配或撤銷的 最後 保存(循環的最後,不是中間).
CPhpAuthManager::save 方法將所有分配的角色數據保存到 auth.php.
還記得剛才的問題嗎?
$this->_assignments[$userId][$itemName]
就像你看到的 auth.php 將會被覆蓋,並且每個用戶Id都將會被添加一次角色.假如你有 10000 個用戶,你將會有 10000+ 行在 auth.php 文件中,並且每次都加載它們。
如果你有 100000 用戶 程序就會死掉了...
因為它 每次 都被覆蓋!!!
就像文檔中提到的那樣,如果你沒有幾個良好的策略,最好不要在多余幾百用戶的項目上使用 CPhpAuthManager。
但是當你的層次很簡單,如下:
禁止,嘉賓,用戶,版主,管理員
大多數 網站都是這樣
您可以按照本規則,並輕松地處理一百萬用戶
當不刪除用戶或修改行時從不 撤銷角色
只有當版主或管理員分配了用戶角色時才分配角色並執行 CPhpAuthManager::save 方法
從 不在 accessControl 中使用
'roles'=>array('user')
假如你的用戶表中有角色字段
被禁止的規則將取代您原來的授權,沒必要這麼做,只需禁止未登錄的用戶
怎麼使用 @ 來替換 'roles'=>array('user') 方式
'users' => array('@')
對於
'roles'=>array('someROle')
只 對版主和管理員使用
如果你遵循這個規則,如果你用一百萬用戶,你大致會有100個版主和幾個管理員對於 CPhpAuthManager 這只是小意思.
你只需要記住每一個角色的分配都將向 auth.php 文件添加行,並每次都會加載它.