Hola ¿cómo están? espero que bien, quería preguntarte cómo hacer que en barra del menú aparezca el nombre del usuario, y a la vez pueda acceder a sus datos para editarlo.
Paso el código de los archivos a ver:
Controller/AppController.php
<?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
public $components = array(
'DebugKit.Toolbar',
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'users', 'action' => 'login'),
'authError' => 'Debes estar logueado para continuar',
'loginError' => 'Nombre de usuario o contraseña incorrectos',
'authorize' => array('Controller')
)
);
public function beforeFilter() {
$this->Auth->allow('login');
}
public function isAuthorized($user) {
// Admin puede acceder a todo
// Si no es así entonces se trata de un usuario común y lo redirigimos a otra página.
// En este caso a la acción usuario del controller users
if (isset($user['role']) && $user['role'] === 'admin' && $this->action='index') {
return true;
}
elseif ($user['status'] == 1){
$this->Session->setFlash('Bienvenido, '. $this->Auth->user('username'));
//$this->redirect('login');
return true;
}
//Por defecto se deniega el acceso
return false;
}
}
Controller/UsersController.php
<?php
App::uses('AppController', 'Controller');
/**
* CakePHP UsuariosController
* @author detectivejd
*/
class UsersController extends AppController
{
public function index(){
}
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('login','add');
//Si el usuario tiene un rol de admin entonces le dejamos paso a todo.
//Si no es así se trata de un usuario común y le permitimos solo la acción
//logout y la correspondiente a usuario (página solo para ellos)
if($this->Auth->user('role') === 'admin') {
$this->Auth->allow();
} elseif ($this->Auth->user('role') === 'usuario') {
$this->Auth->allow('logout', 'usuario');
}
}
public function login() {
//if already logged-in, redirect
if($this->Session->check('Auth.User')){
$this->redirect(array('action' => 'index'));
}
// if we get the post information, try to authenticate
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->Session->setFlash('Bienvenido, '. $this->Auth->user('username'));
$this->redirect($this->Auth->redirectUrl());
}
else {
$this->Session->setFlash('Nombre de usuario o contraseña incorrectos');
}
}
}
public function logout() {
$this->redirect($this->Auth->logout());
}
public function add(){
if ($this->request->is('post')) {
$this->User->create();
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('Nuevo usuario creado'));
$this->redirect(array('action' => 'login'));
}
else {
$this->Session->setFlash(__('Hubo un error y no se pudo crear al usuario'));
}
}
}
}
View/Elements/menu.ctp
<div class="navbar navbar-default navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header navbar">
<a href="#" class="navbar-brand">
<img src="<?php echo $this->webroot; ?>img/LaCoste&Montaña4.png" style="max-width:100px; margin-top: -7px;" />
LaCoste & Montaña
</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="#">¿Quienes Somos?</a></li>
<li><a href="#">Nuestro Trabajo</a></li>
<li><a href="#">Contactenos</a></li>
<?php if($this->Session->check('Auth.User')){ ?>
<li><?php echo $this->Html->link("Tareas", array('controller'=>'users','action'=>'index')) ?></li>
<?php }?>
</ul>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown dropdown-submenu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo ($this->Session->check('Auth.User')) ? "Logueado" : "Usuario";?><b class="caret"></b></a>
<ul class="dropdown-menu">
<?php if($this->Session->check('Auth.User')){ ?>
<li><a href="#">Registrese</a></li>
<li><?php echo $this->Html->link("Salir", array('controller'=>'users','action'=>'logout')) ?></li>
<?php } else { ?>
<li><?php echo $this->Html->link("Registrese", array('controller'=>'users','action'=>'add')) ?></li>
<li><?php echo $this->Html->link("Iniciar Sesión", array('controller'=>'users','action'=>'login')) ?></li>
<?php }?>
</ul>
</li>
</ul>
</div>
</div>
</div>
Saludos.