2011-04-07 131 views
0

我開始使用CakePHP,只想使用訪問控制列表(ACL)

我找到了一個教程,但我無法使用它。
我想要兩個單獨的權限組。

管理員可以註冊新用戶。 用戶只能登錄並查看他們的個人資料。

我認爲這是很簡單,但我不能讓邏輯..
我希望你能幫助我,這真是令人沮喪...:PCakePHP驗證ACL

數據庫 用戶 ID - 主 用戶名 - 獨特 密碼 GROUP_ID 組 ID - 初級 名字 - 獨特

Model類美國ER

<?php 
class User extends AppModel { 
    var $name = 'User'; 
    var $displayField = 'username'; 
    var $belongsTo = array( 
     'Group' => array( 
      'className' => 'Group', 
      'foreignKey' => 'group_id' 
     ) 
    ); 
} 
?> 

示範班集體

<?php 
class Group extends AppModel { 
    var $name = 'Group'; 
    var $displayField = 'name'; 

    var $hasMany = array( 
     'User' => array( 
      'className' => 'User', 
      'foreignKey' => 'group_id', 
      'dependent' => false 
     ) 
    ); 

} 
?> 

Controller類AppController的

<?php 
class AppController extends Controller { 

    var $components = array('Auth', 'RequestHandler'); 
    var $permissions = array(); 

    function beforeFilter() { 
     $this->Auth->fields = array( 
      'username'=>'username', //The field the user logs in with (eg. username) 
      'password' =>'password' //The password field 
     ); 
     $this->Auth->authorize = 'controller'; 
     $this->Auth->autoRedirect = false; 
     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'welcome'); 

    } 

    function isAuthorized(){ 
     if($this->Auth->user('group') == 'admin') return true; //Remove this line if you don't want admins to have access to everything by default 
     if(!empty($this->permissions[$this->action])){ 
      if($this->permissions[$this->action] == '*') return true; 
      if(in_array($this->Auth->user('group'), $this->permissions[$this->action])) return true; 
     } 
     return false; 

    } 

} 
?> 

控制器類UsersController

<?php 
class UsersController extends AppController { 

    var $name = 'Users'; 
    var $helpers = array('Html', 'Form'); 
    var $permissions = array( 
     'logout' => '*', 
     'welcome' => '*' 
    ); 

    function welcome(){ 
    } 

    function login(){ 
     if($this->Auth->user()){ 
      $this->Session->write('Auth.User.group', $this->User->Group->field('name',array('id' => $this->Auth->user('group_id')))); 
      $this->redirect($this->Auth->redirect()); 
     } 
    } 

    function logout(){ 
     $this->redirect($this->Auth->logout()); 
    } 

    function registerusers(){ 
    // Only for administrators.. how can I set this permission? 
    } 

    // Add whatever user logic methods you'd like here as well (eg. add/edit/delete users) 
?> 

回答

0

您是否按照CakePHP Manual中的說明創建了ACL表(arosacos)?

如果您遵循該教程,您將看到需要設置正確的結構以確定哪個用戶(或組)可以執行哪個操作。

1

anddevelop,

從快速審查,我會傾向於說你混的事情了,例如$actsAs丟失,並添加了一些其他的東西。您應該閱讀正式教程here,因爲它提供了您要求的內容。

鼓勵的話:如果你仔細地瀏覽教程,你會成功。只需從新的CakePHP環境中嘗試。