Codeigniter 2.x - Аутентификация + библиотека ACL

Мне нужна библиотека Codeigniter 2.x ACL + Authentication.

Мне нужно предоставить 3 разных пользователя-администратора и 2 разных пользователя переднего плана, и я хочу установить все динамически через базу данных.

Пожалуйста помоги.


person dang    schedule 22.09.2011    source источник


Ответы (1)


Двумя наиболее популярными библиотеками аутентификации для 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']);
   }
person Mike S.    schedule 22.09.2011
comment
Рассматривали ли вы возможность разветвления проекта на GitHub и добавления своей функциональности? Это может быть что-то, с чем проект хочет слиться. Это довольно простое дополнение, добавляющее хорошую функциональность. - person Andy Shinn; 04.11.2011
comment
@AndyShinn - Хотя я все еще думаю, что Ion_auth - лучшее место для начала, я взломал его до такой степени, что он едва напоминает оригинал. Я рассмотрю его публикацию после завершения моего текущего проекта. Теперь он включает в себя ACL, возможность использования нескольких адресов электронной почты, интеграцию API Mailchimp и возможность интеграции FB/Twitter. Мне понадобится помощь, чтобы очистить его и сделать последние функции необязательными, поскольку они просто включены для целей моего проекта. - person Mike S.; 07.11.2011
comment
@МайкС. Я использую Ion Auth 2 и с этим github.com/weblogics/Codeigniter-Ion- Плагин Auth-ACL для Ion Auth 2. но я не понимаю, как предоставить разрешения (ключ и значение)? Вы поможете мне понять этот код. - person Ganesh Aher; 17.01.2018
comment
@GaneshAher, я разветвил Ion Auth более шести лет назад и не оглядывался назад. Извините, я не могу быть полезным. - person Mike S.; 19.01.2018
comment
@МайкС. Хорошо, спасибо за ответ. - person Ganesh Aher; 19.01.2018