2011-01-11 89 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