Разрешения на основе группы CakePHP - PullRequest
3 голосов
/ 11 января 2011

Я хотел бы иметь групповые ограничения, которые позволили бы пользователям получать доступ только к указанным частям сети. Я новичок во всем, что касается 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, но они все еще работают.

Любые ответы приветствуются

Ответы [ 2 ]

3 голосов
/ 11 января 2011

Во-первых, это торт 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 и так далее, но я не стал вдаваться в подробности, потому что он кажется слишком сложным для вещей, которые я создаю в данный момент.Руководство по компоненту auth на YouTube, когда я учился делать это.youtube.com/watch?v=FjXAnizmR94

3 части, и он хорошо все объясняет.

Удачи!

1 голос
/ 12 января 2011

Хорошо, так что это рабочее решение.(/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';
        }
}
...