【问题标题】:cakephp group based permissionscakephp 基于组的权限
【发布时间】:2011-01-11 09:57:39
【问题描述】:

我希望有基于组的限制,允许用户仅访问网络的指定部分。我是整个 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/addwww.example.com/registered/users/add 类型的地址)?这种地址不是在routes.php 中设置的事件,但它们仍然有效。

欢迎回答

【问题讨论】:

    标签: authentication cakephp cakephp-1.3 acl


    【解决方案1】:

    首先这个蛋糕是 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 身份验证组件教程,当时我正在学习如何执行此操作。 youtube.com/watch?v=FjXAnizmR94

    有3个部分,他解释的很好。

    祝你好运!

    【讨论】:

    • 不好意思,忘了说我用的是 cake 1.3
    • 查看教程和文档。如果您仍然遇到困难,我相信我可以提供帮助 :-)
    【解决方案2】:

    好的,这是一个可行的解决方案。 (/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';
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-19
      • 2015-03-11
      • 2019-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多