Лучший способ сделать страницы администратора в CodeIgniter?
Я работаю над приложением в CodeIgniter, и я хочу иметь страницы администратора для нескольких объектов в приложении, и мне интересно, что было бы лучшим способом поместить их в структуру MVC.
Идея 1:
В каждом контроллере есть функция администратора и добавьте все страницы администратора, которые я хотел бы в эту функцию.
пример url-адреса: domain.com/articles/admin
Идея 2
Сделайте новый контроллер администратора, который должен был бы ссылаться на много разных модели, и поместите туда все страницы администратора.
пример url-адреса: domain.com/admin/articles
какой путь был бы лучше?
редактировать для уточнения: под функциональностью администратора я имею в виду возможность выполнять основные действия CRUD на любом объекте и иметь возможность отображать список всех указанных объектов.
7 ответов
Я буду эхом Джастина, сохраняя его частью отдельных контроллеров.
вы должны настроить какую-то систему авторизации, которую отдельные контроллеры могут использовать для того, кто вошел в систему (имя пользователя) и какой доступ у них есть (admin/member/etc). вот так поток на CodeIgniter Auth Classes.
представление будет условно показывать соответствующие ссылки, и контроллер будет применять политику, проверяя аутентификацию перед передачей любых данных для модели или отображения вида редактирования. При несанкционированном доступе ошибка может быть отображена или просто отображена с видом без редактирования.
этот подход кажется наиболее разумным (по крайней мере для меня), потому что все функции хранятся в отдельном контроллере. Сохранение функций администратора в одном контроллере администратора означает, что вам придется управлять двумя контроллерами (администратором и фактическим контроллером) каждый раз, когда вы добавляете что-то новое (или удаляете что-то).
Если вы беспокоитесь о том, чтобы поставить проверку подлинности в каждом контроллере, вы можете создать общий класс контроллера со всей настройкой auth, а затем ваши контроллеры расширяют его. В конце отдельного контроллера двиг проверить можно так:
function edit()
{
if(!$this->auth()){
//display auth error, or forward to view page
}
}
конечно, какая-то реализация ACL сделала бы это лучше, но я не верю, что CodeIgniter имеет "официальный" ACL.
определенно другой контроллер по крайней мере!
раньше я думал, что могу сохранить все свои функции администратора в одном контроллере, но по мере роста моих программ я понял, что мне нужно несколько контроллеров в моем разделе администрирования.
Итак, я создал папку внутри папки моих контроллеров с именем "admin" и поместил туда все мои административные контроллеры. Поэтому мои папки будет выглядеть например:
- приложения
- контроллеры
- фронт.в PHP
- добро пожаловать.в PHP
- админ
- панель управления.в PHP
- useradmin.в PHP
- контроллеры
- etc...
одна проблема, которую это создает, однако, при вводе http://mysite.com/admin в вашем браузере он возвращает 404 страницы. Итак, перейдите в " application/config / routes.php " файл и добавить пользовательский маршрут:
$routes['admin'] = 'admin/dashboard/index';
это хорошая идея, чтобы иметь папку администратора в папке контроллеров, где вы можете получить доступ к вашей администрации, например yoursite.com/admin/users.
все ваши административные потребности будут там, и все методы будут защищены путем проверки привилегий пользователя, например:
if ( ! $this->auth->logged_in(array('login', 'admin')))
{
$this->session->set_flashdata('message', 'You do not have access to view this page');
redirect('admin/users/login');
}
тогда все контроллеры вне папки "admin" будут - в зависимости от вашего типа сайта - только для просмотра и т. д.. никаких административных частей.
вот обширное руководство для профессионалов и мошенников каждого метода:
http://philsturgeon.co.uk/news/2009/07/Create-an-Admin-panel-with-CodeIgniter
в зависимости от того, что вы подразумеваете под функциональностью "Admin"...как правило, это рассматривается как представление "редактировать".
и, как правило, вы используете существующий контроллер для обслуживания представления "редактировать", позволяющего авторизованным пользователям вносить изменения (в вашем случае только пользователям-администраторам).
выглядит как личный выбор, мне нравится, что все централизовано, поэтому контроллер администратора будет моей ставкой.
таким образом, мне не пришлось бы открывать 5 разных контроллеров при изменении задач администратора.