Como obtener el id del usuario logueado en una vista?

3,230 views
Skip to first unread message

lerods

unread,
Dec 6, 2010, 3:05:47 PM12/6/10
to CakePHP en Español
Buen día:

Tengo un problema con las algunas vistas, y he visto como obtener el
id de usuario desde el modelo en algunos foros, pero necesitaría
obtener el id del usuario en la vista para solucionar mi problema ,
para allí realizar unos condiciónales de acuerdo al usuario.
Alguien me podría indicar como obtener este id de usuario en la vista,
es posible?


Muchas gracias de antemano.

Christopher Castro

unread,
Dec 6, 2010, 4:08:17 PM12/6/10
to cakep...@googlegroups.com
pues con el helper Session no?


--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a cakephp-esp...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-esp?hl=es.




--
Christopher C.
Analista Programador Senior PHP/MySQL
Pamplona, España

Pedro Arana

unread,
Dec 6, 2010, 4:28:25 PM12/6/10
to cakep...@googlegroups.com
obtenlo desde el controlador y envialo a la vista.

2010/12/6 Christopher Castro <y2k...@gmail.com>:

--
Defiende tu derecho a pensar, porque incluso pensar de manera errónea
es mejor que no pensar.
-Hipatia de Alejandría

lerods

unread,
Dec 6, 2010, 8:15:24 PM12/6/10
to CakePHP en Español
Bueno primero gracias, estoy leyendo algo del helper de session, y con
respecto a lo segundo (obtenlo desde el controlador y envialo a la
vista) me podrías indicar que tema debo leer.
Ya tengo montado varios modelos, con sus controladores y vistas
corriendo, pero no soy experto, a penas llevo un par de mese
conociendo cakephp. Si me podrían brindar alguna otra pista seria de
mucha ayuda.
Muchas Gracias.

Pedro Arana

unread,
Dec 6, 2010, 8:28:15 PM12/6/10
to cakep...@googlegroups.com
2010/12/6 lerods <leonardorod...@gmail.com>:

http://book.cakephp.org/view/845/loadModel

Despues de una segunda leida, creo que no se de donde vas a sacar el user_id

Si estas usando el componente Auth
http://book.cakephp.org/view/247/AuthComponent-Methods
Con eso consigues el user_id

Ya con el user id puedes obtener los demas datos del usuario (con loadModel)

al final de tu metodo agregas algo como

$this->set('User', $this->User->data);

Para pasar los datos de Usurio a la vista

Saludos
Pedro Arana

lerods

unread,
Dec 6, 2010, 8:51:50 PM12/6/10
to CakePHP en Español
Gracias Pedro por tu pronta respuesta, me ha sido útil tu ayuda, voy a
leer, y en cuanto tenga algún avance regresare.
gracias

wcho...@gmail.com

unread,
Dec 6, 2010, 9:43:19 PM12/6/10
to cakep...@googlegroups.com
Supongo que estas usando el componente Auth???

Si ese es el caso haz algo asi. Primero carga el componente y el helper Session desde el controller.

<?php
...
var $helpers = array ('Session');

var $components = array ('Auth','Session');

...
?>

Luego en la vista puedes hacer lo siguiente donde lo necesites:

<?php
if ($session->read ('Auth.Usuario.id')== 1) {
// codigo del bloque
}
else if ($session->read ('Auth.Usuario.id')== 2) {
// codigo del bloque
}
else {
// codigo del bloque
}
?>

De todas formas lee la documentacion. Cualquier cosa avisa!
Enviado desde mi BlackBerry de Movistar

lerods

unread,
Dec 8, 2010, 12:48:12 AM12/8/10
to CakePHP en Español
Gracias Wladimir, tu código me ha sido de gran ayuda, y la verdad no
pensé que fuera tan fácil, me funciono correctamente.
Estoy tratando de combinarlo con lo que me comento Pedro.

Pero hago otra pregunta, disculpa pero llevo varios días probando
cosas, pero lo que me indicaste he logrado avanzar.
Si deseo obtener de igual manera el user_id desde el modelo, el código
que me indicas funciona de igual manera en el modelo?, o existe
algunas otras lineas mágicas con las cuales pueda obtener el id desde
el modelo.
Te comento esto, porque en mi aplicación debo ajustar algunas cosas en
algunos modelos, porque necesito filtrar los registros por el usuario
que se encuentra logueado. En la vista ya lo puedo hacer, pero aun me
queda el modelo.
Tienes idea de como obtener el id de usuario logueado desde el modelo?
De antemano muchas gracias.



wcho...@gmail.com

unread,
Dec 8, 2010, 8:43:49 AM12/8/10
to cakep...@googlegroups.com
No estoy seguro de si puedes usar exactamente el mismo codigo. Pero yo haria algo asi (x lo menos para responderte y que puedas seguir avanzando mientras pruebo otra cosa y te aviso):

Primero, toma el id del usuario logueado y almacenalo en un "input" de tipo oculto. Algo asi, despues que creas el formulario:

<?php
// se crea el formulario
echo $form->create (
'User',
array (
'url' => array (
'controller'=>'users',
'action'=> 'add'
)
)
);

// creas un campo oculto con
// el id del usuario logueado
echo $form->input (
'user_logueado',
array (
'type'=>'hidden',
'value'=> $session->read(
'Auth.User.id')
)
);


// tu otro codigo de la vista
?>

Una ves que haces eso, y que el usuario presiona el boton de envío del formulario, desde el modelo puedes acceder a esa variable haciendo uso del arreglo $this->data.


// modelo
<?php
...
function cualquiera () {
if ($this->data ['User'].
['user_logueado'] == 1) {
// codigo deseado
}
}
?>

Esa funcion "cualquiera" deberia ser llamada desde una regla de validacion propia del modelo, o desde el propio controlador asociado. O haciendo uso de algun callback ( ) del modelo, como 'beforeSave ()' por ejemplo.


Enviado desde mi BlackBerry de Movistar

-----Original Message-----
From: lerods <leonardorod...@gmail.com>
Sender: cakep...@googlegroups.com
Date: Tue, 7 Dec 2010 21:48:12
To: CakePHP en Español<cakep...@googlegroups.com>
Reply-To: cakep...@googlegroups.com
Subject: [CakePHP-esp] Re: Como obtener el id del usuario logueado en una vista?

Christopher C

unread,
Dec 8, 2010, 9:00:24 AM12/8/10
to cakep...@googlegroups.com
Enviar el id de usuario por post???!!

No te parece un poco peligroso hacer eso?

Para eso esta el componente session.

Enviado desde iPhone de Christopher

wcho...@gmail.com

unread,
Dec 8, 2010, 9:05:20 AM12/8/10
to cakep...@googlegroups.com
Si, en eso tienes razon. Pero tengo la duda porque no se si se puede usar el componente "Session" desde un modelo. Por eso dije que iba a probar otra cosa puesto que implementar esa solucion tiene sus incovenientes.

Christopher Castro

unread,
Dec 8, 2010, 9:23:21 AM12/8/10
to cakep...@googlegroups.com
pues vaya gran inconveniente xD.
Solo te digo que esa solucion en general nunca jamas deberia ser utilizada ni sugerida.


Para usar el componente en el modelo puedes hacer simplemente esto:

App::import('Component', 'Session');
$this->Session= new SessionComponent();



O si quieres incluso puedes importar el Helper, si es que lo que necesitas solo es usar los metodos check() y read()

App::import('Helper', 'Session');
$this->Session= new SessionHelper();



solo pega esas lineas en algun metodo de tu controlador, por ejemplo en  __contruct() y asi lo dejas definido siempre que se inicie la clase.
Obviamente para acceder a los metodos del componente,/helper debes usar la instancia $this->Session en el modelo


ya sabes; nunca pongas ese tipo de datos en sesiones ni en campos de formulario. Una session de usuario en general deberia contener el ID y datos basicos como nombre y apellido como mucho. Nunca guardes en las sessiones las contraseñas (ni aunque esten enciptadas) u otro tipo de datos que afecten al flujo de ejecucion.

salu2

wcho...@gmail.com

unread,
Dec 8, 2010, 9:26:42 AM12/8/10
to cakep...@googlegroups.com
Excelente respuesta. Tienes razon. Gracias por el dato

Enviado desde mi BlackBerry de Movistar


From: Christopher Castro <y2k...@gmail.com>
Date: Wed, 8 Dec 2010 15:23:21 +0100

lerods

unread,
Dec 8, 2010, 10:33:54 AM12/8/10
to CakePHP en Español

Interesante discusión, permitanme procesar la información, y hacer las
pruebas sobre mi aplicación.
Y nuevamente gracias a todos por sus sugerencias.

David Riveros

unread,
Dec 9, 2010, 11:35:11 AM12/9/10
to cakep...@googlegroups.com
Para obtener el ID del usuario en el modelo dado por Auth, lo mejor es que hagan una función en el modelo la cual reciba por parametro el ID del usuario, y ustedes desde el controlador le pasan el id a esa función con el componente Auth, así no rompen el esquema de cake.

Saludos.


-- 

David Riveros Fonseca | Desarrollador Web | ANDAIN - Desarrollo y diseño Web
driv...@andain.cl
  | http://www.andain.cl/



2010/12/8 lerods <leonardorod...@gmail.com>

Interesante discusión, permitanme procesar la información, y hacer las
pruebas sobre mi aplicación.
Y nuevamente gracias a todos por sus sugerencias.

--

lerods

unread,
Dec 9, 2010, 4:25:18 PM12/9/10
to CakePHP en Español
Que tal¡¡.., Vuelvo como mi modelo, y que me ha funcionado
correctamente gracias a la discusión generada.
En términos generales quería aplicar un beforefind(), en el modelo de
acuerdo al user_id, o group_id, en este caso les enseño con el
group_id. Y que lo pude obtener gracias a lo mencionado anteriormente.
Esta es mi función creada en el modelo.

Lo dejo para quien tenga un problema similar.
Se que seguramente se puede mejorar el código, pero dejo la solución
base.
Gracias a todos.



function beforeFind($queryData) {

App::import('Helper', 'Session');
$this->Session= new SessionHelper();

if ($this->Session->read ('Auth.User.group_id')== 3) {


echo $this->Session->read ('Auth.User.id');
$queryData['conditions'][$this->name.'.preparador_id'] = $this-
>Session->read ('Auth.User.id');

}


if ($this->Session->read ('Auth.User.group_id')== 2) {


echo $this->Session->read ('Auth.User.id');
$queryData['conditions'][$this->name.'.supervisor_id'] = $this-
>Session->read ('Auth.User.id');


}

return $queryData;

}
Reply all
Reply to author
Forward
0 new messages