usuarios usuario spatie personalizado permission modificar control autenticacion and laravel eloquent laravel-5.1

spatie - Cómo verificar el usuario es administrador o no en la vista de hoja laravel



roles de usuario laravel 5 (5)

Entonces tienes un campo isAdmin si es 1, por ejemplo, el usuario es administrador, si no es así. Cuando el usuario está conectado, verifique con (Auth::user()->isAdmin == 1) entonces el usuario es el administrador, de lo contrario no es

con Auth::user()-> puede verificar cualquier campo de la tabla de usuarios del usuario registrado actual.

Atentamente

yo tengo

Tabla de usuario como

+==============+ | User | +==============+ | id | +--------------+ | firstname | +--------------+ | lastname | +--------------+ | email | +--------------+ | password | +--------------+

y mi tabla de roles

+==============+ | Roles | +==============+ | id | +--------------+ | name | +--------------+

y mi tabla role_user es

+=============+ | role_user | +=============+ | user_id | +-------------+ | role_id | +-------------+

¿Cómo puedo verificar que el usuario registrado actual sea administrador o usuario normal?


Necesita agregar una relación de roles en su modelo de User manera:

public function roles() { return $this->belongsToMany(App/Role::class); }

y ahora necesitas crear el usuario de isAdmin así:

public function isAdmin() { return in_array(1, $this->roles()->pluck(''role_id'')->all()); }

Como 1 , pones el id de tu rol de administrador. Por supuesto, también podría definirse de otra manera, pero todo depende de cómo se usará.

También podría definirse de esta manera:

public function isAdmin() { return $this->roles()->where(''role_id'', 1)->first(); }

y ahora en tu Blade puedes hacer:

@if (auth()->check()) @if (auth()->user()->isAdmin() Hello Admin @else Hello standard user @endif @endif


No es una ACL para esta funcionalidad simple. Ni siquiera necesita los roles una tabla de base de datos. Puede agregar una columna de status adicional de tinyInteger y agregar números, por ejemplo:

  • 0 = Deshabilitado
  • 1 = Visitante
  • 2 = Admin.

Para que sea funcional, agregue el siguiente código a su User.php .

public function isDisabled () { return $this->statusCheck(); } public function isVisitor () { return $this->statusCheck(1); } public function isAdmin () { return $this->statusCheck(2); } protected function statusCheck ($status = 0) { return $this->status === $status ? true : false; }

Para verificar la plantilla de la blade puede agregar

@if(Auth::user()->isDisabled()) You are not Active @elseif(Auth::user()->isVisitor()) Welcome to example.com @elseif(Auth::user()->isAdmin()) Welcome Admin @endif

Además, puede crear directivas personalizadas blade, pegar este código en su app/providers/AppServiceProvider.php en boot() método boot() .

// Blade custom directives for isAdmin Blade::directive(''isAdmin'', function() { return "<?php if(Auth::user()->isAdmin()): ?>"; }); Blade::directive(''endisAdmin'', function() { return "<?php endif; ?>"; }); // Blade custom directives for isVisitor Blade::directive(''isVisitor'', function() { return "<?php if(Auth::user()->isVisitor()): ?>"; }); Blade::directive(''endisVisitor'', function() { return "<?php endif; ?>"; }); // Blade custom directives for isDisabled Blade::directive(''isDisabled'', function() { return "<?php if(Auth::user()->isDisabled()): ?>"; }); Blade::directive(''endisDisabled'', function() { return "<?php endif; ?>"; });

Para llamar a esto, use la necesidad de escribir las siguientes líneas en su blade view

@isAdmin() Welcome Admin @endisAdmin @isVisitor() Welcome to example.com @endisVisitor @isDisabled() Your are not active @endisDisabled

En resumen, laravel le proporciona una serie de formas de resolver un problema, solo depende de su necesidad y estructura de la aplicación.


Role.php

use Illuminate/Database/Eloquent/Model; class Role extends Model { protected $fillable = [ ''name'' ]; /** * A role can have many users. * * @return /Illuminate/Database/Eloquent/Relations/BelongsToMany */ public function users() { return $this->belongsToMany(''App/User''); } }

Luego puede agregar esto al modelo de Usuario :

public function isAdmin() { foreach ($this->roles()->get() as $role) { if ($role->name == ''Admin'') { return true; } } }

Ver

@if(Auth::check()) @if (Auth::user()->isAdmin()) <h2>Admin user enter code here<h2> @endif @endif


los métodos compartidos funcionan. el problema es que si tiene que verificar más de una vez por página, muchas veces golpea la base de datos. por ejemplo, digamos que tiene una navegación con 8 enlaces. los enlaces primero, cuarto y séptimo solo deberían ser visibles por el administrador. esa consulta golpeará su base de datos 3x. tal vez solo soy anal pero es una solicitud duplicada.

Estoy tratando de encontrar otra forma de almacenar una variable que se carga una vez en la vista / plantilla para que cada vez que necesite verificar si es un administrador, revise la variable y no acceda a la base de datos cada vez. Lo hice a través del controlador -> ver, pero no solo ver solo en una plantilla. Estoy pensando en crear un método de ayuda y devolver un objeto que se comprobará una vez por carga de página.