Я поддержу Джастина в том, чтобы он оставался частью отдельных контроллеров.
Вы должны установить какую-то систему авторизации, которую отдельные контроллеры могут использовать для того, кто вошел в систему (имя пользователя) и какой у них доступ (admin / member / etc). Вот SO поток по классам аутентификации CodeIgniter .
В этом случае представление будет условно отображать соответствующие ссылки, и контроллер будет применять политику, проверяя аутентификацию перед передачей любых данных в модель или визуализацией представления редактирования. При несанкционированном доступе ошибка может отображаться или просто отображаться в режиме без редактирования.
Этот подход кажется наиболее целесообразным (по крайней мере для меня), потому что все функции хранятся в отдельном контроллере. Хранение функций администратора в одном контроллере администратора означает, что вам придется управлять двумя контроллерами (администратором и фактическим контроллером) каждый раз, когда вы добавляете что-то новое (или что-то удаляете).
Если вы хотите установить проверку подлинности на каждом контроллере, вы можете создать универсальный класс контроллера со всей настройкой аутентификации, а затем попросить контроллеры расширить его. В итоге проверка подлинности отдельного контроллера может быть такой простой, как:
function edit()
{
if(!$this->auth()){
//display auth error, or forward to view page
}
}
Конечно, какая-то реализация ACL могла бы сделать это лучше, но я не верю, что CodeIgniter имеет «официальный» ACL.