entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Logeo con 2 tablas en Laravel (Auth)

Hola, estoy usando Laravel 4 y uso los procedimientos de laravel para logearme, osea uso Auth, sin embargo el sistema que estoy realizando debe contar con logeo para adiministradores, o usuarios del sistema (modifican productos, etc, etc) y logeo tambien para usuarios normales para realizar compras.
Pero obviamente tener registros de administradores y usuarios normales en la misma tabla es una mala practica. Que es lo que deberia hacer en este caso?
Gracias

1 Respuesta

3votos

white Puntos75820

Hola @christian_avalos, al crear dos tablas para usuarios como bien dices no sería una buena práctica, te doy una mejor forma de manejar a tus usuarios, puedes crear un sistema de permisos y grupos de esta forma asignamos a los usuarios un grupo que cuenta con varios permisos, llamemos a las tablas: permissions, groups y group_permission

usuarios contendra una columna para el grupo o bien una tabla que haga de referencia entre los usuarios y los grupos.

id (int) | group_id (int) | username (varchar) | email (varchar)
   1              1       |   christian_avalos |  [email protected]

groups contendrá a los grupos de usuario, un nombre y una descripción (opcional), su estructura podría ser:

id (int) |  name (varchar) | description (varchar)
   1        Administrador         ...
   2        Regular               ...

permissions contendra los permisos como variables en camel case y una descripcion (opcional)

id (int) |     name (varchar)    | description (varchar)
   1        can_modify_products  | puede modificar productos
   2        can_shop_products    | puede comprar productos

group_permission contendra la relación entre los grupos y los permisos así como un campo que especifique si esta permitido ese permiso, su estructura puede ser la siguiente:

group_id (int) | permission_id (int) | allowed (tinyint)
     1         |           1         |        1
     1         |           2         |        1
     2         |           1         |        0
     2         |           2         |        1

de modo que tendrias en laravel los modelos User, Group y Permission

el modelo Group puede contener lo siguiente:

public function permissions()
{
    return $this->belongsToMany('permission');
}

public function hasPermission($permission)
{
    return in_array($permission, array_fetch($this->permissions->toArray(), 'name'));
}

el modelo User lo siguiente:

public function group()
{
    return $this->belongsTo('Group');
}

con esto puedes manejar a tus usuarios de mejor manera.

$user = User::find(1);

if( $user->group->id == 1 )
{
    // el usuario es administrador
}

if( $user->group->hasPermission('can_modify_product') )
{
    // el usuario puede modificar productos
}

if( $user->group->hasPermission('can_shop_products') )
{
    // el usuario puede hacer compras a productos
}

saludos!

1voto

christian_avalos comentado

Gracias por una respuesta tan completa @white!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta