2011-01-11 71 views
3

我想有基於組的限制,只允許用戶訪問網絡的指定部分。我對整個ACL是新手,我從手冊中沒有完全理解它/因此我想問一些問題。cakephp基於組的權限

但任何問題之前,我的路線是這樣的:

Router::connect('/', array('controller' => 'users', 'action' => 'login')); 
Router::connect('/admin/:controller/:action/*', array('prefix' => 'admin', 'admin' => true)); 
Router::connect('/registered/:controller/:action/*', array('prefix' => 'registered', 'registered' => true)); 

1)如何限制從任何其他組的用戶比Administrator僅訪問網絡的/registered/部分

2 )我如何防止任何人在全球範圍內使用默認地址如www.example.com/users/add(我只想要www.example.com/admin/users/addwww.example.com/registered/users/add類型的地址)?這種地址不是在routes.php中設置的事件,但它們仍然有效。

任何答案apprecated

回答

1

好吧,所以這是一個工作溶劑。 (/app/app_controller.php

function beforeFilter() {    
     if ((isset($this->params['admin']))) { 
      $admin_grp = $this->UserGroup->find('first', array(
       'conditions' => array(
        'UserGroup.name' => 'Administrator'))); 
      if ($this->Auth->user('user_group_id') != $admin_grp['UserGroup']['id']) { 
       $this->Session->setFlash(__('Access denied.', true)); 
       $this->redirect("/registered"); 
      } else { 
       $this->layout = 'admin'; 
      } 
     } else if (isset($this->params['registered'])) { 
      if (!$this->Auth->user()) { 
       $this->Session->setFlash(__('Access denied. You need to login first.', true)); 
       $this->redirect("https://stackoverflow.com/users/login"); 
      } 
      $this->layout = 'registered'; 
     } else { 
      $this->layout = 'default'; 
     } 
} 
3

首先是這塊蛋糕1.3或1.2? 1.3使用前綴路由。你可以設置多個前綴,例如,現在我正在開發一個需要通過管理員/控制器/操作進行管理員控制的站點,並且我還將一些區域限制爲僅註冊用戶。例如/ users/controller/action。

這是比較容易做到的,第一步是建立前綴在core.php中:

Configure::write('Routing.prefixes', array('admin', 'registered')); 

在此記載: http://book.cakephp.org/view/950/Prefix-Routing

驗證組件可以人在這裏照顧周全,你可以使用ACL等,但我沒有深入瞭解這一點,因爲它似乎過於複雜,我目前正在創建的東西。

當我正在學習如何做到這一點時,我發現有幫助的教程是YouTube上的Andrew Perkins身份驗證組件教程。 youtube.com/watch?v=FjXAnizmR94

有3個部分,他解釋得很好。

祝你好運!

+0

Sry基因,忘了提我使用的蛋糕1.3 – Elwhis 2011-01-11 19:45:57