2011-01-11 4 views
3

Я хотел бы иметь ограничения на основе групп, которые позволят пользователям получать доступ только к определенным частям сети. Я новичок во всех материалах ACL, и я не совсем понял это из руководства:/поэтому я хотел бы задать несколько вопросов.разрешения на основе группы cakephp

Но прежде, чем какие-либо вопросы, мои маршруты выглядеть следующим образом:

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/ части полотна

- .) Как запретить кому-либо использовать адреса по умолчанию, такие как www.example.com/users/add в глобальном масштабе (я хочу только www.example.com/admin/users/add или www.example.com/registered/users/add тип адресов)? Этот вид адресов не является событием, установленным в routes.php, но они все еще работают.

Любые ответы apprecated

ответ

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("https://stackoverflow.com/users/login"); 
      } 
      $this->layout = 'registered'; 
     } else { 
      $this->layout = 'default'; 
     } 
} 
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 части, и он хорошо объясняет ситуацию.

Удачи!

+0

Sry, забыл упомянуть, я использую торт 1.3 – Elwhis

+1

Проверьте учебники и документацию. Если вы все еще застряли, я уверен, что смогу помочь :-) –

Смежные вопросы