Лучший способ сделать страницы администратора в CodeIgniter? - PullRequest
8 голосов
/ 09 ноября 2009

Я работаю над приложением в CodeIgniter, и я хочу, чтобы у меня были страницы администратора для нескольких объектов в приложении, и мне интересно, что было бы лучшим способом поместить их в структуру MVC.

Идея 1: В каждом контроллере есть функция администратора, и добавьте все страницы администратора, которые я хотел бы, в эту функцию. пример URL: domain.com/articles/admin

Идея 2 Создайте новый контроллер администратора, который должен будет ссылаться на множество различных моделей, и поместите все страницы администратора там. пример URL: domain.com/admin/articles

Какой путь будет лучше?

Редактировать для пояснения: Под функциональностью администратора я имею в виду возможность выполнения основных действий CRUD над любым объектом и возможность отображения списка всех упомянутых объектов.

Ответы [ 7 ]

6 голосов
/ 10 ноября 2009

Определенно другой контроллер как минимум!

Раньше я думал, что могу хранить все свои функции администратора в одном контроллере, но по мере роста моих программ я понял, что мне нужно несколько контроллеров в разделе администрирования.

Итак, я создал папку внутри своей папки контроллеров с именем «admin» и поместил туда все свои административные контроллеры. Поэтому мои папки будут выглядеть примерно так:

  • приложение
    • Контроллеры
      • front.php
      • welcome.php
      • админ
        • dashboard.php
        • useradmin.php
  • и т.д ...

Однако возникает одна проблема: когда вы набираете http://mysite.com/admin в своем браузере, он возвращает страницу 404. Итак, перейдите к файлу «application / config / rout.php» и добавьте собственный маршрут:

$routes['admin'] = 'admin/dashboard/index';
2 голосов
/ 01 октября 2010

Вот обширное руководство по преимуществам и недостаткам каждого метода:

http://philsturgeon.co.uk/news/2009/07/Create-an-Admin-panel-with-CodeIgniter

2 голосов
/ 10 ноября 2009

Идея 2 лучше. система / приложение / контроллеры / админ

Здесь вы храните все свои административные контроллеры.

2 голосов
/ 10 ноября 2009

Я поддержу Джастина в том, чтобы он оставался частью отдельных контроллеров.

Вы должны установить какую-то систему авторизации, которую отдельные контроллеры могут использовать для того, кто вошел в систему (имя пользователя) и какой у них доступ (admin / member / etc). Вот SO поток по классам аутентификации CodeIgniter .

В этом случае представление будет условно отображать соответствующие ссылки, и контроллер будет применять политику, проверяя аутентификацию перед передачей любых данных в модель или визуализацией представления редактирования. При несанкционированном доступе ошибка может отображаться или просто отображаться в режиме без редактирования.

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

Если вы хотите установить проверку подлинности на каждом контроллере, вы можете создать универсальный класс контроллера со всей настройкой аутентификации, а затем попросить контроллеры расширить его. В итоге проверка подлинности отдельного контроллера может быть такой простой, как:

function edit()
{
    if(!$this->auth()){
        //display auth error, or forward to view page
    }
}

Конечно, какая-то реализация ACL могла бы сделать это лучше, но я не верю, что CodeIgniter имеет «официальный» ACL.

2 голосов
/ 10 ноября 2009

Хорошей идеей будет иметь папку администратора в папке контроллеров, где вы можете получить доступ к администрированию, например, 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' - в зависимости от вашего типа сайта - будут только для просмотра и т. Д. Без административных частей.

1 голос
/ 09 ноября 2009

В зависимости от того, что вы подразумеваете под функциональностью «Администратор» ... обычно это рассматривается как представление «Редактировать».

И, как правило, вы используете существующий контроллер для представления «Редактировать», позволяя авторизованным пользователям вносить изменения (в вашем случае, только пользователям с правами администратора).

0 голосов
/ 10 ноября 2009

Выглядит как личный выбор, я люблю, чтобы все было централизовано, поэтому администраторский контроллер был бы моей ставкой.

Таким образом, мне не нужно открывать 5 разных контроллеров при изменении задач администратора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...