Модуль авторизации Kohana 3, получение пользователей с ролью «персонал» или «менеджер» - PullRequest
5 голосов
/ 24 августа 2010

Я изучаю фреймворк и сейчас создаю приложение, используя его.

Мне нужно, чтобы все пользователи имели роль «пользователь» или «персонал», но я не смог найти об этом в документации.

Помогите кому-нибудь?(Я думаю, что это больше проблема ORM в модуле аутентификации)

Ответы [ 2 ]

9 голосов
/ 25 августа 2010

Я не нашел простого способа сделать это с помощью ORM, но у меня есть обходной путь.
Это мой код для тех, кто может столкнуться со той же проблемой со мной.

// One for each role
$staffs = ORM::factory('role', array('name' => 'staff'))->users->find_all()->as_array();
$managers = ORM::factory('role', array('name' => 'manager'))->users->find_all()->as_array();

// Merge the results
$results = array_merge($staffs, $managers);
1 голос
/ 27 августа 2010

Может быть, вам стоит создать для него отдельный метод ORM? Примерно такой код:

public function get_users(array $roles)
{
    $users = DB::select(array($this->_has_many['roles']['foreign_key'], 'id'))
               ->distinct(TRUE)
               ->from($this->_has_many['roles']['through'])
               ->where($this->_has_many['roles']['far_key'], 'IN', DB::expr('('.implode(',', $roles).')'))
               ->execute($this->_db);
    if (count($users) == 0)
    {
        // return empty list
        return array();
    }
    // now we need only IDs from result
    $ids = array();
    foreach($users as $columns)
    {
        $ids[] = $columns['id'];
    }
    // load users by id
    return $this->where($this->_primary_key, 'IN', DB::expr('('.implode(',', $ids).')'))->find_all();
}

$ role - это массив role_id (не имена!). PS. Я не помню, как запрашивать «ГДЕ ВХОД», поэтому я использую выражения БД.

...