Kohana 3 auth模块,让用户具有“员工”或“经理”角色

时间:2010-08-24 01:08:50

标签: php kohana-3 kohana-orm kohana-auth

我正在学习框架,现在正在使用它构建应用程序。

我需要让所有拥有'用户'或'员工'角色的用户,但我在文档中找不到它。

帮助任何人? (我认为这更像是一个ORM问题的auth模块)

2 个答案:

答案 0 :(得分:9)

我没有找到使用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 :(得分:1)

可能你应该为它创建一个单独的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();
}

$ roles是一个role_id数组(不是名字!)。 PS。我不记得如何查询'WHERE IN',所以我使用DB表达式。