2016-04-23 3 views
0

Я ищу CakePHP 3.x update for this question. В основном, я аутентифицирую пользователей, используя компонент Auth в CakePHP 3, и вам необходимо включить groups.Содержит группы в Auth info CakePHP 3

Мои модели отношений заключаются в следующем:

User hasMany Groups 
Group hasMany Users 

Так в основном это многие-ко-многим.

В настоящее время моя функция Войти выглядит следующим образом:

public function login() 
{ 
    if ($this->request->is('post')) { 
     $user = $this->Auth->identify(); 
     if ($user) { 
      $this->Auth->setUser($user); 
      return $this->redirect($this->Auth->redirectUrl()); 
     } 
     $this->Flash->error(__('Invalid username or password, try again')); 
    } 
    $this->viewBuilder()->layout('login'); 
} 

Есть ли способ сделать это с Auth компонентом?

ответ

0

Так что это было довольно легко:

Я изменил свою функцию входа в систему на это:

public function login() 
{ 
    if ($this->request->is('post')) { 
     $user = $this->Auth->identify(); 
     if ($user) { 
      $user = $this->setUserGroups($user); 
      $this->Auth->setUser($user); 
      die(debug($this->Auth->user())); 
      return $this->redirect($this->Auth->redirectUrl()); 
     } 
     $this->Flash->error(__('Invalid username or password, try again'),['params'=>['class'=>'test']]); 
    } 
    $this->viewBuilder()->layout('login'); 
} 

Затем я создал функцию setUserGroups($user)

/** 
* @param AuthComponent $user 
* @return TableRegistry $this 
*/ 
private function getUserGroups($user) 
{ 
    $users = TableRegistry::get('Users'); 

    $query = $users->find() 
     ->contain(['Groups']) 
     ->where(['users.id' => $user['id']]) 
     ->limit(1); 
    return $query; 
} 

/** 
* @param AuthComponent $user 
* @return AuthComponent mixed 
*/ 
private function setUserGroups($user) 
{ 
    $results = $this->getUserGroups($user); 
    $user['groups'] = []; 
    foreach ($results as $row) { 
     foreach ($row->groups as $group) { 
      $user['groups'][] = $group['id']; 
     } 
    } 

    return $user; 
} 

Теперь возвращает мой пользовательский объект с массив идентификаторов группы.

+1

Вам лучше использовать [** пользовательский поиск **] (http://book.cakephp.org/3.0/en/controllers/components/authentication.html#customizing-find-query). – ndm

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