Доступ администратора с помощью tank_auth в Codeigniter - PullRequest
1 голос
/ 19 марта 2012

Я использую Tank Auth , и мой проект будет поддерживать два типа доступа: "обычный пользователь" и "администратор". Я посмотрел на базу данных Tank Auth, и там есть поле «isadmin», поэтому я считаю, что при входе в систему возможно перенаправление на /admin или /user.

Как я могу это сделать? Я вижу только is_logged_in().

Я уже видел это: http://codeigniter.com/forums/viewthread/207245/, но я хочу только перенаправление на /user или /admin URL в зависимости от того, администратор или нет.

1 Ответ

4 голосов
/ 19 марта 2012

К сожалению, Tank_Auth не имеет встроенных функций групп пользователей или разрешений. Я не уверен, где вы видели поле с именем isadmin, потому что оно, похоже, не является частью текущая настройка по умолчанию , и я даже не могу найти слово "admin" в файлах пакета.

Это самое простое решение, которое я могу придумать:

Добавить is_adminполе, которое вы упомянули в таблице пользователей, и управляйте им вручную.

ALTER TABLE `users`
ADD COLUMN `is_admin` TINYINT(1) UNSIGNED NOT NULL DEFAULT '0';

Работая с тем, что в настоящее время использует Tank_Auth, вы будете читать пользовательские данные из сеанса, поэтому вам придется добавить их всеанс при входе в систему.

// Tank_Auth.php Line 71
$this->ci->session->set_userdata(array(
    'is_admin'  => (bool) $user->is_admin, // added
    'user_id'   => $user->id,
    'username'  => $user->username,
    'status'    => ($user->activated == 1) ? STATUS_ACTIVATED : STATUS_NOT_ACTIVATED,
));

Затем добавьте свою собственную функцию в библиотеку:

function is_admin()
{
    return $this->logged_in() && $this->ci->session->userdata('is_admin') === TRUE;
}

Затем вам нужно будет добавить это в контроллер входа для перенаправления при входе в систему:

// controllers/auth.php Line 30
function login()
{
    if ($this->tank_auth->is_admin()) {
        redirect('admin');
    } elseif ($this->tank_auth->is_logged_in()) {
        redirect('user');
    }
    // Rest of code stays untouched...
}

Тогда ваш администратор всегда должен проверять $this->tank_auth->is_admin().

Это - самый короткий маршрут , который я могу предложить для достижения ваших целей - вероятно, не лучше , но вас может заинтересовать Ion_Auth , который по умолчанию обрабатывает группы пользователей.

...