CakePHP基于组的权限

3
我希望有一种基于组的限制,允许用户仅访问指定部分的网页。我对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.) 如何限制非管理员组的用户仅访问网站中的/registered/部分?

2.) 如何全局阻止任何人使用默认地址,例如www.example.com/users/add (我只想要www.example.com/admin/users/addwww.example.com/registered/users/add这种类型的地址)?这些地址甚至没有在routes.php中设置,但它们仍然可以使用。

感谢您提供任何答案。

2个回答

3

首先,这个蛋糕是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等,但我没有深入研究,因为在我创建的东西中似乎过于复杂。
我在学习如何做这个时,发现了Andrew Perkins的认证组件教程,在Youtube上非常有帮助。 youtube.com/watch?v=FjXAnizmR94
他解释得很好,分成3部分。
祝你好运!

抱歉,我忘了提到我正在使用Cake 1.3。 - Elwhis
1
请查看教程和文档。如果您仍然遇到困难,我相信我可以帮助您 :-) - Nick Martin

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';
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接