Browse Source

Tipo Servicios

Servcios solo puede crear Usarios de tipo Usuarios
main
TheSilva7 1 month ago
parent
commit
06bf32232f
  1. 6
      app/Http/Controllers/Auth/LoginController.php
  2. 6
      app/Http/Controllers/HomeController.php
  3. 12
      app/Http/Controllers/usuariosController.php
  4. 2
      app/Http/Middleware/CheckServiciosRole.php
  5. 12
      app/Providers/AuthServiceProvider.php
  6. 4
      database/seeders/ServiciosSeeder.php
  7. 23
      resources/views/usuariosCrearEditar.blade.php

6
app/Http/Controllers/Auth/LoginController.php

@ -40,10 +40,10 @@ class LoginController extends Controller
protected function authenticated($request, $user) protected function authenticated($request, $user)
{ {
if ($user->tipos_id == 1) { if ($user->tipos_id == 1) { // Administrador
return redirect('/dashboard');
} elseif ($user->tipos_id == 4) { // Servicios Generales
return redirect('/dashboard'); return redirect('/dashboard');
} elseif ($user->tipos_id == 2) {
return redirect('/user-dashboard');
} else { } else {
return redirect('/home'); return redirect('/home');
} }

6
app/Http/Controllers/HomeController.php

@ -25,12 +25,12 @@ class HomeController extends Controller
{ {
$user = auth()->user(); $user = auth()->user();
// Validar que el usuario tenga tipo asignado y que sea Administrador // Validar que el usuario tenga tipo asignado y que sea Administrador o Servicios Generales
if (!$user->tipo || $user->tipo->nombre !== 'Administrador') { if (!$user->tipo || !in_array($user->tipos_id, [1, 4])) {
// Cerrar la sesión del usuario // Cerrar la sesión del usuario
auth()->logout(); auth()->logout();
// Redirigir con mensaje de error // Redirigir con mensaje de error
return redirect()->route('login')->with('error', 'No tienes permisos para acceder al sistema. Solo los administradores pueden acceder en este momento.'); return redirect()->route('login')->with('error', 'No tienes permisos para acceder al sistema. Solo los administradores o servicios pueden acceder en este momento.');
} }
// Notificaciones si el usuario no tiene puesto o departamento asignado // Notificaciones si el usuario no tiene puesto o departamento asignado

12
app/Http/Controllers/usuariosController.php

@ -96,6 +96,11 @@ class usuariosController extends Controller
'password.confirmed' => 'Las contraseñas no coinciden.', 'password.confirmed' => 'Las contraseñas no coinciden.',
]); ]);
// Validación extra: si el usuario autenticado es de servicios generales, solo puede crear usuarios de tipo Usuario
if (auth()->user()->tipos_id == 4 && $request->tipos_id != 2) {
return redirect()->back()->withInput()->withErrors(['tipos_id' => 'Solo puedes crear usuarios de tipo Usuario.']);
}
// Si la validación pasa, crea el usuario // Si la validación pasa, crea el usuario
$usuario = new User(); $usuario = new User();
$usuario->name = $request->name; $usuario->name = $request->name;
@ -106,12 +111,7 @@ class usuariosController extends Controller
$usuario->departamento_id = $request->departamento_id; $usuario->departamento_id = $request->departamento_id;
$usuario->telefono = $request->telefono; $usuario->telefono = $request->telefono;
$usuario->password = bcrypt($request->password); $usuario->password = bcrypt($request->password);
// Asignar rol si viene en la petición y el usuario autenticado es admin o servicios // Ya no asignamos rol, solo usamos tipos_id
if (auth()->user()->rol === 'admin' && $request->has('rol')) {
$usuario->rol = $request->rol;
} elseif (auth()->user()->rol === 'servicios') {
$usuario->rol = 'usuario'; // Solo puede crear usuarios normales
}
$usuario->save(); $usuario->save();
return redirect()->route('usuarios')->with('success', 'Usuario creado exitosamente.'); return redirect()->route('usuarios')->with('success', 'Usuario creado exitosamente.');

2
app/Http/Middleware/CheckServiciosRole.php

@ -10,7 +10,7 @@ class CheckServiciosRole
{ {
public function handle(Request $request, Closure $next): Response public function handle(Request $request, Closure $next): Response
{ {
if (!auth()->check() || auth()->user()->rol !== 'servicios') { if (!auth()->check() || auth()->user()->tipos_id !== 4) {
return redirect('/')->with('error', 'No tienes permisos de servicios para acceder a esta sección.'); return redirect('/')->with('error', 'No tienes permisos de servicios para acceder a esta sección.');
} }

12
app/Providers/AuthServiceProvider.php

@ -21,11 +21,11 @@ class AuthServiceProvider extends ServiceProvider
* Register any authentication / authorization services. * Register any authentication / authorization services.
*/ */
public function boot(): void public function boot(): void
{ {
$this->registerPolicies(); $this->registerPolicies();
Gate::define('gestionar-prestamos', function ($user) { Gate::define('gestionar-prestamos', function ($user) {
return in_array($user->rol, ['admin', 'servicios']); return in_array($user->tipos_id, [1, 4]); // 1 para admin, 4 para servicios
}); });
} }
} }

4
database/seeders/ServiciosSeeder.php

@ -17,7 +17,9 @@ class ServiciosSeeder extends Seeder
'apellido' => 'Servicios', 'apellido' => 'Servicios',
'telefono' => '1234567890', 'telefono' => '1234567890',
'password' => Hash::make('servicios123'), 'password' => Hash::make('servicios123'),
'rol' => 'servicios', 'tipos_id' => 4,
'puesto_id' => 1,
'departamento_id' => 1
] ]
); );
} }

23
resources/views/usuariosCrearEditar.blade.php

@ -78,12 +78,23 @@
</div> </div>
<select name="tipos_id" id="tipos_id" class="block w-full pl-10 pr-3 py-2 border border-gray-300 rounded-md" required> <select name="tipos_id" id="tipos_id" class="block w-full pl-10 pr-3 py-2 border border-gray-300 rounded-md" required>
<option value="">Selecciona un tipo</option> <option value="">Selecciona un tipo</option>
@foreach($tipos as $tipo) @if(auth()->user()->tipos_id == 4)
<option value="{{ $tipo->id }}" @foreach($tipos as $tipo)
{{ (isset($usuario) && $usuario->tipos_id == $tipo->id) ? 'selected' : '' }}> @if($tipo->id == 2)
{{ $tipo->nombre }} <option value="{{ $tipo->id }}"
</option> {{ (isset($usuario) && $usuario->tipos_id == $tipo->id) ? 'selected' : '' }}>
@endforeach {{ $tipo->nombre }}
</option>
@endif
@endforeach
@else
@foreach($tipos as $tipo)
<option value="{{ $tipo->id }}"
{{ (isset($usuario) && $usuario->tipos_id == $tipo->id) ? 'selected' : '' }}>
{{ $tipo->nombre }}
</option>
@endforeach
@endif
</select> </select>
</div> </div>
</div> </div>

Loading…
Cancel
Save