Kohana 3 module auth, obtenir les utilisateurs avec « personnel » ou « gestionnaire » rôle

StackOverflow https://stackoverflow.com/questions/3552875

Question

J'apprends le cadre, et maintenant la construction d'une application qui l'utilise.

J'ai besoin de tous les utilisateurs qui ont un rôle « utilisateur » ou « personnel », mais je ne pouvais pas trouver à ce sujet sur la documentation.

quiconque aide? (Je pense qu'il est plus un problème de ORM le module auth)

Était-ce utile?

La solution

Je ne trouve pas un moyen facile de le faire en utilisant l'ORM, mais j'ai une solution de contournement.
Ceci est mon code pour tous ceux qui pourraient rencontrer avec moi le même problème.

// 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);

Autres conseils

Peut être vous devez créer une méthode ORM séparée pour elle? Quelque chose comme ce code:

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();
}

$ rôles est un tableau role_id (pas de noms!). PS. Je ne me souviens pas comment la requête 'WHERE IN', donc j'utilise des expressions DB.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top