我希望基于组的限制允许用户只访问网络的指定部分。我是整个ACL的新手,我从手册中得不到它:/因此我想问一些问题。
但在提出任何问题之前,我的路线看起来像这样:
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/add
或www.example.com/registered/users/add
类型的地址)?这种地址不是routes.php
中设置的事件,但仍可以使用。
任何答案都赞赏
答案 0 :(得分: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
Auth组件可以在这里处理其他所有事情,你可以使用ACL等等,但我还没有深入研究这个问题,因为我现在正在创建的东西似乎过于复杂。
当我学习如何做到这一点时,我发现有用的教程是关于youtube的Andrew Perkins auth组件教程。 youtube.com/watch?v=FjXAnizmR94
共有3个部分,他解释得很清楚。
祝你好运!
答案 1 :(得分: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("/users/login");
}
$this->layout = 'registered';
} else {
$this->layout = 'default';
}
}