Creating routes based on user_type and permissions to access routes

This commit is contained in:
ygbanzato 2023-04-26 15:21:41 +01:00
parent 567605ceb9
commit 1da54d43f4
7 changed files with 110 additions and 3 deletions

View File

@ -0,0 +1,37 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use Laravel\Fortify\Contracts\LoginResponse as LoginResponseContract;
use Laravel\Fortify\Contracts\LogoutResponse as LogoutResponseContract;
use Laravel\Fortify\Fortify;
use Laravel\Fortify\Http\Controllers\AuthenticatedSessionController as FortifyAuthenticatedSessionController;
use App\Models\User;
class userController extends Controller
{
public function authenticate(Request $request)
{
$request->validate([
Fortify::username() => 'required|string',
'password' => 'required|string',
]);
$user = User::where('email', $request->email)->first();
if ($user && Hash::check($request->password, $user->password)) {
return $user;
}
return null;
}
}

View File

@ -53,6 +53,7 @@ class Kernel extends HttpKernel
* @var array<string, class-string|string>
*/
protected $middlewareAliases = [
'checksuperadmin' => \App\Http\Middleware\CheckSuperAdmin::class,
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
@ -63,5 +64,6 @@ class Kernel extends HttpKernel
'signed' => \App\Http\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
}

View File

@ -0,0 +1,25 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class CheckSuperAdmin
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (auth()->user() && auth()->user()->user_type == 'Super_Admin') {
return $next($request);
}
return abort(403, 'Acesso não autorizado.');
// return $next($request);
}
}

View File

@ -19,9 +19,27 @@ public function handle(Request $request, Closure $next, string ...$guards): Resp
{
$guards = empty($guards) ? [null] : $guards;
// foreach ($guards as $guard) {
// if (Auth::guard($guard)->check()) {
// return redirect(RouteServiceProvider::HOME);
// }
// }
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
$user = Auth::guard($guard)->user();
switch ($user->user_type) {
case 'Cliente':
return redirect(RouteServiceProvider::CLIENTE);
case 'Tecnicos':
return redirect(RouteServiceProvider::TECNICO);
case 'inspetor':
return redirect(RouteServiceProvider::INSPETOR);
// Adicione outros tipos de usuário e suas rotas aqui
default:
return redirect(RouteServiceProvider::HOME);
}
}
}

View File

@ -19,6 +19,11 @@ class RouteServiceProvider extends ServiceProvider
*/
public const HOME = '/';
// public const HOME = '/home';
public const CLIENTE = '/cliente';
public const TECNICO = '/Tecnicos';
public const INSPETOR = '/inspetor';
/**
* Define your route model bindings, pattern filters, and other route configuration.
*/

View File

@ -121,7 +121,7 @@ class="fas fa-bars"></i></a>
<li class="nav-item">
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit" class="btn btn-link">Logout</button>
<button type="submit" class="nav-link active">Logout</button>
</form>
{{-- <a href="{{route('logout')}}" class="nav-link active">
<i class="nav-icon fas fa-tachometer-alt"></i>
@ -140,6 +140,15 @@ class="fas fa-bars"></i></a>
</a>
</li>
<li class="nav-item">
<a href="{{ route('test') }}" class="nav-link active">
<i class="nav-icon fas fa-tachometer-alt"></i>
<p>
TestController
</p>
</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">

View File

@ -16,6 +16,8 @@
use App\Http\Controllers\NewPasswordController;
use App\Http\Controllers\Auth\PasswordResetLinkController;
use App\Http\Controllers\userController;
/*
@ -40,6 +42,15 @@
})->name('formulario');
});
Route::middleware(['auth', 'verified', 'checksuperadmin'])->group(function () {
// Rotas protegidas que exigem verificação de e-mail e user_type Super_Admin
Route::get('formulario', function () {
return view('email/formAdmin');
})->name('formulario');
});
// Rota responsavel por enviar o formulario
Route::post('enviar-formulario', [FormController::class, 'enviarEmail'])->name('enviar.formulario');
@ -47,7 +58,7 @@
return view('email/createUser');
});
Route::get('test', [userController::class,'test'])->name('test');