Custom Search
Bloggers Activos
Emacs como IDE para CakePHP aarkerio
La Negación del Viaje Lunar tonathiu
Porque los mononeurones si tenemos madre! blacksoul
BrunoFerías thot
The Art vendaval
Aclimatación extraterrestre ¿para qué? ahuramazdah
¿A que le tienes miedo? teosho
Sobre nazis, terror y medios tonathiu
Amenazas a la cuarta dimensión ¿de veras? ahuramazdah
Tarjeta Broadcom BCM94311MCG rev 02 teosho
Last Download
Segunda Fundación
Segunda Fundación
Pidiendo OpenSolaris 2008.5
vendaval
Sospechosismo
aarkerio
Slackware 12.1 Final
vendaval
Jaime Maussan da por auténtico video trucado del chupacabras hecho en Blender 3D
asarch
Linux hot girl
aarkerio
Calderón puede ser sujeto a juicio político, sostiene Carrancá
tonathiu
La desnutrición en México
aarkerio
Sistema Infalible
ordbal
Histórico
aarkerio
Nietzsche en la FCPyS
aarkerio
Google Groups Karamelo
Visit this group
GNU/Linux
GNU/Linux
Hacktivismo
Hacktivismo
Debian
Debian
NetBSD
NetBSD
WWW
WWW
Guia Linux
Guia Linux
Server Side
Server Side
Ofimatica
Ofimatica
Despabilando...
Despabilando...
Mundo Maya
Mundo Maya
Literatura
Literatura
Agora
Agora
Psicologia
Psicologia
Economia
Economia
Ambientalismo
Ambientalismo
Desarrollo
Desarrollo
Biologia
Biologia
Una suite para ti
Una suite para ti

Hacktivism

LinuxChix button

Server Side \ El componente Auth
Server Side
El componente Auth

Este artículo ha sido consultado en 155 ocasiones.

<< Venimos de aquí

Routing admin

Routing.admin es una constante que indica que en la aplicación de CakePHP existe una zona "admin" o de administración, esta zona debe ser restringida. Encuentra y descomenta en app/config/core.php la línea que dice:

Configure::write('Routing.admin', 'admin');

Esto quiere decir que puedes ir a una liga como http://localhost/admin/entries/listing donde el controlador es entries_controller.php (nuestro actual controlador) y el método es admin_listing() que usa la vista app/views/entries/admin_listing.ctp. Esto se usa para definir una zona restringida por el componente Auth.

Auth Component

El componente Auth se usa colocándolo en el archivo app/app_controller.php, este archivo es especial: se ejecuta antes de cualquier otro controlador y hereda sus métodos y atributos a todos los demás controladores pues define el Auth en el método beforeFilter, un método de CakePHP que como el nombre lo indica, coloca un filtro previo. Guarda este archivo en app/.

Este archivo importa el componente Auth para toda la aplicaciòn. Es importante hacer notar que estamos usando el email y no el username para hacer el logeo. Las partes más importantes de la configuración de Auth son:

$ this- > Auth->authorize = 'controller';

Esto quiere decir: los permisos son definidos en cada controlador.

$ this- > Auth->deny('*');
Esto es: todas la acciones de todos los controladores están prohibidas a menos de que se diga lo contrario en el controlador. Sólo hay dos acciones que pueden usarse: login() y logout() del controlador users.

Si las indicaciones del componente Auth están colocadas en app_controller.php (como lo acabamos de hacer) significa que cada uno de nuestros controladores necesitan dos métodos extras, el método beforeFilter() y el método isAuthorized().

public function beforeFilter()
{
$this->Auth->allow(array('display', 'view')); // es decir que todo mundo puede ejecutar los métodos display y view de este controlador
parent::beforeFilter();
}

public function isAuthorized()
{
if (isset( $this->params[Configure::read('Routing.admin')] )) // si estoy en la zona admin
{
if ( $this->Auth->user('id') == 1 ) // si soy el usuario con el id 1
{
return true; // Welcome!
}
}
return false; // go away !!
}

$this->Auth->allow(array('display', 'view')) del método beforeFilter() define en cada controlador que acciones están disponibles sin seguridad, en este caso display y view son accesibles a cualquiera que llegué a nuestro sitio. El método isAuthorized sirve para restringir la zona admin del blog.

Necesitamos el controlador 'users' para manejar el login y el logout de nuestro blog:

< ?
//archivo: app/controllers/users_controller.php
class UsersController extends AppController {

public function login()
{
$this ->layout = 'portal';
}

public function logout()
{

}
}
?>

Necesitamos una vista para el formulario de logeo:

//archivo: app/views/users/login.ctp
< ?
echo $form->create('User', array('controller' => 'users', 'action' => 'login'));
echo $form->input('email');
echo $form->input('pwd');
echo $form->end('Login');
?>

Nos colocamos en http://localhost/users/login y debemos ver el formulario de logeo. Si escribimos nuestro correo y password debemos entrar como usuarios al blog. En nuestro layout portal.ctp tenemos una parte quer dice:

if ( isset( $cU['User'] ) )

Este array $cU es colocado en las vistas y layouts por app_controller.php siempre y cuando el usuario este logeado. Es decir que siempre tendrás este array disponible en las vistas si quieres mostrar o conocer la información de un usuario. En los controladores usarás el componente Auth así para ir por información del usuario:

$ this -> Auth->user('username'); // para el username
$ this -> Auth->user('id'); // para el user_id

Necesitamos agregar varios métodos de la sección de administración al controlador entries:

/** ==== ADMIN METHODS ====*/
public function admin_listing()
{
$this->layout = 'admin';

$conditions = array("Entry.user_id"=>$this->Auth->user('id'));

$fields = null;

$limit = 20;

$this->set('data', $this->Entry->findAll($conditions, $fields, $order, $limit));
}

public function admin_add()
{
$this->layout = 'admin';

$this->set('thems', Set::combine($this->Entry->Theme->find('all', array('order' => 'title')), "{n}.Theme.id","{n}.Theme.title"));

if ( !empty($this->data["Entry"]) )
{
$this->Sanitize = new Sanitize;

$this->Sanitize->paranoid($this->data["Entry"]["title"]); // antihacker

$this->Sanitize->html($this->data["Entry"]["body"]); // antihacker

$this->Entry->create(); // prepara el query

if ($this->Entry->save($this->data["Entry"]))
{
$this->flash('Story added', '/admin/entries/listing');
}
}
}
public function admin_delete($id)
{
if ( $this->Entry->del($id) )
{
$this->msgFlash('The entry has been deleted.', '/admin/entries/listing');
}
}

Como se ve es necesario tener un layout app/views/layouts/admin.ctp para usarlo en la sección admin.

El método admin_listing requiere de la vista app/views/entries/admin_listing.ctp, el ,étodo admin_add de la vista  app/views/entries/admin_add.ctp, etcétera.


Observaciones finales: Una buena aplicación debe tener la lógica en el modelo y no el controlador. No se deben re-declarar las asociaciones, es decir si en el modelo User se tiene hasMany Entry, en Entry no se debe poner belongsTo->User.

Ficha del autor:

manuel_ARRROBA_mononeurona.org
Manuel Montoya estudió neuropsicología en la facultad y en el Instituto de Biomédicas de la UNAM. Trabajó en Compaq de México como diseñador de software, tiene diez años de experiencia en Java, PHP y SQL. Le interesan muchas cosas y neciamente le da por escribir sobre todas ellas. Actualmente trabaja en Chipotle Software, desarrollando Karamelo, una herramienta de e-Learning. Jedit.org y WindowMaker son su editor y escritorio favoritos.
aarkerio
The most effective way to restrict democracy is to transfer decision making from the public arena to unaccountable institutions. Chomsky.
Ver todos los articulos de aarkerio

Última actualización: 2008-03-31 16:07:35-06

Printable version

on 3/4/08 dfgfdgfdg wrote:
Testing ! Testing !
on 3/4/08 dfgfdgfdg wrote:
Testing ! Testing !
on 3/4/08 dfgfdgfdg wrote:
Testing ! Testing !

Add comment:



Captcha




Que estas haciendo?
teoshoteosho está:
Preparandome para el viaje a Puerto Vallarta... que triste...
56 minutes ago

scarecrowscarecrow está:
Du hast?
4 hours, 59 minutes ago

der_teufelder_teufel está:
Ich habe einen Kater, aber nicht so schlecht...
12 hours, 34 minutes ago

rnstuxrnstux está:
Y yo un Abrazo.
1 day, 12 hours ago

saidjosesaidjose está:
Dandole su habrazote a mi santa madre que me soporta
1 day, 14 hours ago

dsquiddsquid está:
esperando a que este el pozole
1 day, 15 hours ago

Que estuvimos haciendo >>
Chipotle Software

En tu equipo tienes:
Sólo Windows
Windows y Linux
Sólo Linux
Linux y un BSD
Solaris, linux y BSD
Sólo MacacOS
Rapiditas
Problemas de Lenguaje en niños
10410 lecturas
Sexualidad infantil y juvenil
9166 lecturas
Anticoncepción de Emergencia
7840 lecturas
Rompiendo cualquier clave WEP en unos pocos minutos
6917 lecturas
Sinapsis y exocitosis
6227 lecturas
Mi primer CakePHP, mmmmm cakeee
5259 lecturas
Evolución filética en las hepáticas
4697 lecturas
BASH y Primeros Comandos
4011 lecturas
CakePHP II Active Record
3742 lecturas
Cómo convertirse en hacker
3619 lecturas
Add to Technorati Favorites

ir arriba
La monogamia es un problema social que la ciencia no ha podido resolver. Kinsey

The Queen is here Mozilla Firefox The Best DataBase CakePHP Framework XHTML GNU Hacker Chipotle Software

Too Cool for Internet Explorer