2009-11-09 22 views
8

Estoy trabajando en una aplicación en CodeIgniter, y quiero tener páginas de administración para varios objetos en la aplicación, y me pregunto cuál sería la mejor manera de ponerlos en una estructura MVC.¿La mejor manera de hacer páginas de administración en CodeIgniter?

Idea 1: En cada controlador, tiene una función de administrador, y añadir todas las páginas de administración que me gustaría en esa función. ejemplo URL: domain.com/articles/admin

Idea 2 Hacer una nueva controladora de administración, lo que tendría que hacer referencia a muchos modelos diferentes, y poner todas las páginas de administración de allí. ejemplo URL: domain.com/admin/articles

¿Qué camino sería mejor?

Editar para aclaración: Por funcionalidad administrativa, me refiero a poder realizar las acciones básicas de CRUD en cualquier objeto, y poder mostrar una lista de todos los objetos mencionados.

Respuesta

2

Haré eco a Justin para mantenerlo como parte de los controladores individuales.

Debe configurar algún tipo de sistema de autorización que los controladores individuales puedan usar para quién está conectado (nombre de usuario) y qué acceso tienen (admin/member/etc). Here's a SO thread on CodeIgniter Auth Classes.

La vista mostraría condicionalmente los enlaces apropiados, y el controlador aplicaría la política marcando la autenticación antes de pasar cualquier dato al modelo o mostrar una vista de edición. En accesos no autorizados, se puede generar un error, o simplemente renderizar con la vista sin edición.

Este enfoque parece tener más sentido (al menos para mí) porque toda la funcionalidad se almacena en el controlador individual. Mantener las funciones de administrador en un solo controlador de administrador significa que tendrá que administrar dos controladores (el administrador y el controlador real) cada vez que agregue algo nuevo (o elimine algo).

Si le preocupa poner la verificación de autenticación en cada controlador, podría crear una clase de controlador genérica con toda la configuración de autenticación, y luego hacer que sus controladores la amplíen. Al final, la comprobación de autenticación controlador individuo podría ser tan simple como:

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

Por supuesto algún tipo de implementación de ACL podría hacer esto mejor, pero no creo que CodeIgniter tiene una 'oficial' de ACL.

+0

Fuera del puñado de votos a la baja: ¿a quién le importa explicar por qué? –

1

Según lo que quiere decir con la funcionalidad 'Admin' ... normalmente, esto se considera una vista 'Editar'.

Y, por lo general, utiliza el controlador existente para servir la vista 'Editar', lo que permite a los usuarios autorizados realizar las ediciones (en su caso, usuarios de administrador solamente).

0

Parece una elección personal, me encanta tener todo centralizado para que el controlador de administración sea mi apuesta.

De esta forma no tendría que abrir 5 controladores diferentes mientras se modifican las tareas administrativas.

+1

Esto no se expande también. el problema aquí es que están atacando juntos un montón de código no relacionado. Cada vez que el motor PHP se ejecuta sobre el controlador, tiene que compilar TODO en su back-end y no solo las cosas relevantes para la acción. –

+0

Puedo argumentar lo contrario. Las áreas de administración no son intensivas en el tráfico, las páginas de usuario sí lo son, y si está trabajando juntos en un área de administración para cada sección, el motor debe ejecutar todos los códigos de administrador que son totalmente irrelevantes para el usuario, por lo tanto un desperdicio. Aún así, esto realmente no importa con el uso de códigos cachers. – pablasso

2

Es una buena idea tener una carpeta de administrador en la carpeta de controladores en la que puede acceder a su administración, p. yoursite.com/admin/users.

Todas sus necesidades administrativas estarán allí y todos los métodos serán protegidos por el control de los privilegios del usuario, así:

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'); 
} 

A continuación, todos los controladores fuera de la carpeta 'admin' se - dependiendo de su tipo de sitio - lo hará solo ser para ver, etc. no hay porciones administrativas.

+0

¿Lo hace en todos los métodos? Debería hacer esto en el constructor del controlador o en un controlador base para guardar la repetición. http://philsturgeon.co.uk/news/2010/02/CodeIgniter-Base-Classes- Keeping-it-DRY –

+0

, por supuesto, puedes hacerlo en un controlador base. –

6

Definitivamente un controlador diferente al menos!

Solía ​​pensar que podía mantener todas mis funciones administrativas en un único controlador, pero a medida que mis programas crecían, me di cuenta de que necesitaba varios controladores en mi sección de administración.

Así que creé una carpeta dentro de mi carpeta de controladores con el nombre "admin" y puse todos mis controladores administrativos allí. Así que mis carpetas se vería algo como:

  • aplicación
    • controladores
      • front.php
      • welcome.php
      • administrador
        • dashboard.php
        • useradmin.php
  • etc ...

Uno de los problemas que esto crea, sin embargo, es cuando se escribe http://mysite.com/admin en su navegador, devuelve una página 404. Por lo tanto, vaya a su archivo "application/config/routes.php" y agregue una ruta personalizada:

$routes['admin'] = 'admin/dashboard/index'; 
2

Idea 2 is better. sistema/aplicación/controladores/admin

Guarde todos sus controladores de administrador aquí.

Cuestiones relacionadas