Funcionalidad De Registro De Usuarios Y Roles

Hola a todos

Llevo varias horas o un día de trabajo leyendo e intentando entender como funciona la autenticaciónen Yii. He leido los siguientes articulos Implementing a User Level Access System y Authentication and Authorization y un video en Youtube. Pero aun estoy algo perdido en el proceso de las llamadas entre Modelo (LoginForm), Controlador (SiteController función Login) y la función authenticate de la clase UserIdentity.

Mayormente no se que valida el Modelo y el Controlador (me parece que es por mi poco conocimiento en PHP) pero me parece que UserIdentity se encarga de mirar en la Base de Datos o por lo menos en el ejemplo que da la aplicación en el arreglo de users -> demo y admin. Tampoco entiendo como puedo asignar un Rol o Permiso al Usuario según el ejemplo del segundo LINK me parece que es cuando hace




$this->setState('title', $record->title);






class UserIdentity extends CUserIdentity

{

    private $_id;

    public function authenticate()

    {

        $record=User::model()->findByAttributes(array('username'=>$this->username));

        if($record===null)

            $this->errorCode=self::ERROR_USERNAME_INVALID;

        else if($record->password!==crypt($this->password,$record->password))

            $this->errorCode=self::ERROR_PASSWORD_INVALID;

        else

        {

            $this->_id=$record->id;

                               //¿title es el  ROLE?

            $this->setState('title', $record->title);

            $this->errorCode=self::ERROR_NONE;

        }

        return !$this->errorCode;

    }

 

    public function getId()

    {

        return $this->_id;

    }

}



Si explicando lo que necesito hacer ayuda, pues les explico -> necesito pasar la autenticación de una página en joomla 2.5 a Yii lo cual se me ha hecho ridiculamente dificil. Se que puedo guardar una sesión en la base de datos pero no tengo idea de como hacerlo. Una vez pueda saber quien se autenticó en joomla pues puedo ofrecer mis servicios de Yii pero en realiadad no entiendo en que parte de Yii se autentica el usuario y como dije me parece que es en la función authenticate de la clase UserIdentity.

Gracias adelantadas por su ayuda, muchisimoas gracias

acabo de encontrar que la forma debe ser tener de esta forma




<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(

	'id'=>'login-form',

	//'enableClientValidation'=>true,

	'enableAjaxValidation'=>true,

	'clientOptions'=>array(

		'validateOnSubmit'=>true,

	),

)); ?>



pero esta raro que no funciona bien, me explico -> la forma no valida

Hola que tal,

según veo no necesitas manejar o autenticar el usuario en yii ya que joomla lo hace,

en yii podrías manejar un regla para verificar si el usuario esta autenticado y determinar si puede usar los servicios de yii o no, pero repito el que dice si el usuario esta logueado es joomla.

te dejo un código donde determinas los datos de usuario de joomla


/**

 * @package		Joomla.Site

 * @copyright	Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.

 * @license		GNU General Public License version 2 or later; see LICENSE.txt

 */

// Set flag that this is a parent file.

define('_JEXEC', 1);




if (file_exists( 'ROOT_JOOMLA/defines.php')) {

	include_once 'ROOT_JOOMLA/defines.php';

}


if (!defined('_JDEFINES')) {

	define('JPATH_BASE', 'ROOT_JOOMLA';

	require_once JPATH_BASE.'/includes/defines.php';

}


require_once JPATH_BASE.'/includes/framework.php';


// Instantiate the application.

$app = JFactory::getApplication('site');




// Route the application.

$app->route();


global $my;

donde ROOT_JOOMLA es la raiz de la carpeta donde esta instalado joomla

y en la variable $my tienes los datos de usuario, como por ejemplo


  	        $my->groups //roles o perfiles del usuario

		$my->name //nombre 

		$my->username //usuario

		$my->guest //logueado; 0 si, 1 no

		$my->email //correo



paras mas información has un print_r a la variable $my

por ultimo si vas a utilizar dicho código dentro de yii encierralo en las siguientes sentencias para que no de comflicto con las librerías internas de yii


spl_autoload_unregister(array('YiiBase','autoload'));

//conexión a joomla...

spl_autoload_register(array('YiiBase','autoload'));

Interesante,¿donde debo poner ese código?

hola,

gracias por el código. He puesto el codigo que distes en /layout/main.php y en index.php en el directorio raiz y llevo algo de tiempo intentando obtener los datos de la variable $my pero siempre me devuelve 1 por lo que me parece que no esta registrando bien el usuario. Tambien he intentado usar$user = JFactory::getUser(); pero tambien devuelve 1. Estoy usando una instalación de joomla 2.5. saludos y muchas gracias

Update -> Debo decirles que lo he logrado. utilizando lo siguiente




define( '_JEXEC', 1 );

define( 'DS', DIRECTORY_SEPARATOR );

define( 'JPATH_BASE', realpath(dirname(__FILE__).'/..' )); //should change to match to your file directory

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );

require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe = JFactory::getApplication('site');

$mainframe->initialise();

$session =& JFactory::getSession();



Luego en protected->layout->main.php utilizo la variable $user con las llamadas que mencionas y veo los datos




echo $user->email;



¿que significa el simbolo -> y => en php?

Hola, saludos, En PHP no se utiliza el operador punto (.) para referirte a un método o atributo ( si has trabajado con .NET, ellos si lo usan :) ) El operador utilizado en php es la flecha (->). . …todo esto si estamos hablando de POO. correcto ?

correcto, gracias por la ayuda

Dispones del modulo "Cruge", el cual es un gestor de RBAC avanzado que ya trae UI para gestionar tanto RBAC como Usuarios ademas de una enorme API y documentacion en español.

http://yiiframeworkenespanol.org/wiki/index.php?title=Cruge