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. 2
      app/Providers/AuthServiceProvider.php
  6. 4
      database/seeders/ServiciosSeeder.php
  7. 11
      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)
{
if ($user->tipos_id == 1) {
if ($user->tipos_id == 1) { // Administrador
return redirect('/dashboard');
} elseif ($user->tipos_id == 4) { // Servicios Generales
return redirect('/dashboard');
} elseif ($user->tipos_id == 2) {
return redirect('/user-dashboard');
} else {
return redirect('/home');
}

6
app/Http/Controllers/HomeController.php

@ -25,12 +25,12 @@ class HomeController extends Controller
{
$user = auth()->user();
// Validar que el usuario tenga tipo asignado y que sea Administrador
if (!$user->tipo || $user->tipo->nombre !== 'Administrador') {
// Validar que el usuario tenga tipo asignado y que sea Administrador o Servicios Generales
if (!$user->tipo || !in_array($user->tipos_id, [1, 4])) {
// Cerrar la sesión del usuario
auth()->logout();
// 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

12
app/Http/Controllers/usuariosController.php

@ -96,6 +96,11 @@ class usuariosController extends Controller
'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
$usuario = new User();
$usuario->name = $request->name;
@ -106,12 +111,7 @@ class usuariosController extends Controller
$usuario->departamento_id = $request->departamento_id;
$usuario->telefono = $request->telefono;
$usuario->password = bcrypt($request->password);
// Asignar rol si viene en la petición y el usuario autenticado es admin o servicios
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
}
// Ya no asignamos rol, solo usamos tipos_id
$usuario->save();
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
{
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.');
}

2
app/Providers/AuthServiceProvider.php

@ -25,7 +25,7 @@ class AuthServiceProvider extends ServiceProvider
$this->registerPolicies();
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',
'telefono' => '1234567890',
'password' => Hash::make('servicios123'),
'rol' => 'servicios',
'tipos_id' => 4,
'puesto_id' => 1,
'departamento_id' => 1
]
);
}

11
resources/views/usuariosCrearEditar.blade.php

@ -78,12 +78,23 @@
</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>
<option value="">Selecciona un tipo</option>
@if(auth()->user()->tipos_id == 4)
@foreach($tipos as $tipo)
@if($tipo->id == 2)
<option value="{{ $tipo->id }}"
{{ (isset($usuario) && $usuario->tipos_id == $tipo->id) ? 'selected' : '' }}>
{{ $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>
</div>
</div>

Loading…
Cancel
Save