我希望有组为基础的限制,将允许用户只访问指定的部分的网络。我是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以外的任何其他组的用户仅访问web的/registered/部分
2.)如何防止任何人在全球范围内使用www.example.com/users/add等默认地址(我只需要www.example.com/admin/users/add或www.example.com/registered/users/add类型的地址)?这种地址不是在routes.php中设置的事件,但它们仍然有效。
建议回答的任何问题
发布于 2011-01-12 23:06:46
好的,这是一个有效的解决方案。(/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';
}
}发布于 2011-01-12 00:50:01
首先,这个蛋糕是1.3还是1.2?在1.3中使用前缀路由。您可以设置多个前缀,例如,现在我正在开发一个站点,它需要管理员通过admin/controller/action进行控制,而且我还将某些区域限制为仅限注册用户。例如/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 component tutorial,当时我正在学习如何做到这一点。youtube.com/watch?v=FjXAnizmR94
有三个部分,他很好地解释了事情。
祝你好运!
https://stackoverflow.com/questions/4656335
复制相似问题