Я пытаюсь создать глобальную аутентификацию с использованием метода _remap в Codeigniter. Ниже приведены условия веб-сайта для доступа к контроллеру/методу:Есть ли способ упростить эту глобальную аутентификацию в кодеигнитре?
- Метод должен существовать.
- Некоторые контроллеры могут быть доступны только в том случае, если пользователь/администратор вошли в систему.
- Некоторые контроллеры могут быть доступны только администратору.
Метод _remap написан в MY_Controller, который будет наследоваться всем контроллером. Вот мой код:
protected $must_login;
protected $must_admin;
public function _remap($method, $param = array())
{
# Check if method exist
if (method_exists($this, $method))
{
# Check whether the user has to be login to access it
if ($this->must_login)
{
# Check whether the user has logged in
if ($this->auth->is_loggedin())
{
# Check whether it has to be admin to access it
if ($this->must_admin)
{
# Check whether it is admin
if ($this->auth->is_admin())
{
# Run the method
return call_user_func_array(array($this, $method), $param);
}
else
{
# Redirecting to login form
$this->go('auth');
}
}
else
{
return call_user_func_array(array($this, $method), $param);
}
}
else
{
$this->go('auth');
}
}
else
{
return call_user_func_array(array($this, $method), $param);
}
}
else
{
$this->go('auth');
}
}
Код работает, но я чувствую, что его можно упростить. Я попытался, но он всегда заканчивается бесконечным перенаправлением. Есть ли способ просто использовать этот метод?
Заранее спасибо.
Я думаю, что это было бы намного проще реализовать, расширив CI_Controller. Примеры здесь повсюду в SO и в Интернете о том, как это сделать. CI уже проверяет действительный контроллер и контроллер/метод и будет error404, если не найден. Вы можете использовать '$ route ['404_override']' для выполнения эквивалента '$ this-> go ('auth');' зачем создавать класс 'go', когда у CI уже есть вполне приемлемый« маршрутизатор », который очень хорошо продуманный? Это было бы намного более упрощенным, если бы вы просто использовали существующую структуру структуры. – DFriend
Я согласен, я думаю, что весь этот подход, хотя он и может работать, не самый надежный, надежный или поддерживаемый метод для достижения того, что на самом деле относительно тривиально - при вызове конкретного контроллера доступ пользователя разрешен. Эта аутентификация может быть достигнута в одной строке, и, что более важно, работа такой аутентификации может быть адаптирована гораздо более прозрачным способом. ИМХО это переутомление функции переназначения и совершенно ненужное. Опять же, IMHO, переназначение - это резерв для краевых случаев и сценариев, обходных решений и выплат. Лично я бы не стал использовать его для этого. – PaulD