Мне нужна библиотека Codeigniter 2.x ACL + Authentication.
Мне нужно предоставить 3 разных пользователя-администратора и 2 разных пользователя переднего плана, и я хочу установить все динамически через базу данных.
Пожалуйста помоги.
Мне нужна библиотека Codeigniter 2.x ACL + Authentication.
Мне нужно предоставить 3 разных пользователя-администратора и 2 разных пользователя переднего плана, и я хочу установить все динамически через базу данных.
Пожалуйста помоги.
Двумя наиболее популярными библиотеками аутентификации для CI (по крайней мере, на начало этого года) оказались Ion_auth и Tank_auth. Ни один из них не справляется с вашими потребностями ACL, хотя Ion_auth обеспечивает функциональность одной группы.
Я начал с Tank_auth в проекте несколько месяцев назад, но переключился на Ion_auth, когда мне понадобилась большая гибкость. С включенной функциональностью я добавил таблицу user_groups и необходимые библиотеки и функции модели, чтобы разрешить членство в нескольких группах для каждого пользователя.
Структура данных:
mysql> describe auth_users_groups;
+------------+-----------------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-----------------------+------+-----+-------------------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| user_id | mediumint(8) unsigned | NO | | NULL | |
| group_id | mediumint(8) unsigned | NO | | NULL | |
| dt_updated | timestamp | NO | | CURRENT_TIMESTAMP | |
+------------+-----------------------+------+-----+-------------------+----------------+
4 rows in set (0.00 sec)
Часть кода добавлена в библиотеку:
public function get_user_groups($user_id = NULL)
{
if ($user_id === NULL) $user_id = $this->get_user()->id;
return $this->ci->ion_auth_model->get_user_groups($user_id)->result();
}
/**
* is_member - checks for group membership via user_groups table
*
* @param string $group_name
* @return bool
**/
public function is_member($group_name)
{
$user_groups = $this->ci->session->userdata('groups');
if ($user_groups)
{
// Go through the groups to see if we have a match..
foreach ($user_groups as $group)
{
if ($group->name == $group_name)
{
return true;
}
}
}
// No match was found:
return false;
}
Некоторый код модели:
public function get_user_groups($user_id = NULL)
{
if ($user_id === NULL) return false;
return $this->db->select('group_id, name, description, dt_updated')
->join($this->tables['groups'], 'group_id = '.$this->tables['groups'].'.id', 'left')
->where('user_id', $user_id)
->get($this->tables['users_groups']);
}
public function set_group($user_id, $group_id)
{
$values = array('user_id'=>$user_id, 'group_id'=>$group_id);
$hits = $this->db->where($values)->count_all_results($this->tables['users_groups']);
if ($hits > 0)
{
return NULL;
}
return $this->db->insert($this->tables['users_groups'], $values);
}
public function remove_groups($user_id, $group_ids)
{
$this->db->where('user_id', $user_id);
$this->db->where_in('group_id', $group_ids);
return $this->db->delete($this->tables['users_groups']);
}