es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quiero desactivar el botón Eliminar basado en auth()->user()->id (LARAVEL 8)

He creado un índice de usuarios donde se muestran todos los datos de los usuarios en una tabla, excepto la contraseña. En el último campo he colocado una acción para eliminar el usuario. El problema es que quiero deshabilitar el botón de eliminar sólo para el usuario que ha iniciado sesión en ese momento. Pero lo que he hecho es desactivar el botón de eliminación para todos los usuarios, por favor, ayúdeme a solucionar esto. He intentado encontrar un tutorial, pero todavía no lo he encontrado. A continuación, se muestra mi código condicional:

@if (auth()->user()->id)

@else

@endif

En UserController, para mostrar todos los datos de los usuarios, uso este código:

public function index(){
$users = User::all();
return view(‘admin.users.index’, [‘users’=> $users]);
}

En index.blade, aplico este código para mostrar todos los datos:

@foreach($users as $user)

@endforeach

{{ __(‘Nombre de usuario’) }} {{ __(‘Nombre’) }} {{ __(‘Correo electrónico’) }} {{ __(‘Rol’) }} {{ __(‘Publicaciones’) }} {{ __(‘Acción’) }}
email}}” class=”text-inherit link-primary”>{{$user->email}} Administrador 100
{{ __(‘Eliminar’) }}
@else

@endif

A continuación, se muestra una captura de pantalla:
enter image description here

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para desactivar el botón de eliminar solo para el usuario que ha iniciado sesión, necesitas comparar la identificación de usuario del usuario actual con la identificación del usuario que se muestra en el bucle. Puedes actualizar tu código de esta manera:

    @foreach($users as $user)
    <tr>
        <td><a href="{{route('user.profile.show', $user->id)}}" class="text-inherit link-primary">{{$user->username}}</a></td>
        <td>{{$user->name}}</td>
        <td><a href="mailto:{{$user->email}}" class="text-inherit link-primary">{{$user->email}}</a></td>
        <td>Administrador</td>
        <td><a href="#" class="text-inherit">100</a></td>
        <td>
            <form action="{{route('users.destroy',$user->id)}}" method="post" enctype="multipart/form-data">
                @csrf
                @method('DELETE')
                @if($user->id === auth()->user()->id)
                    <button class="btn btn-outline-danger btn-xs" disabled=""><i class="fe fe-trash"></i>Hapus</button>
                @else
                    <button class="btn btn-outline-danger btn-xs"><i class="fe fe-trash"></i>Hapus</button>
                @endif
            </form>
        </td>
    </tr>
    @endforeach
    

    Aquí, estamos utilizando el operador === para comparar las identificaciones de los dos usuarios. Si son iguales (es decir, el usuario que ha iniciado sesión es el usuario que se muestra en el bucle), entonces desactivamos el botón de eliminar. De lo contrario, lo habilitamos.

    También deberías asegurarte de que solo los usuarios autenticados puedan acceder a los métodos del UserController. Puedes hacer esto agregando el middleware auth a los métodos en tu archivo routes/web.php, de esta manera:

    Route::group(['middleware' => ['auth']], function () {
        Route::get('users', 'UserController@index')->name('users.index');
        Route::delete('users/{id}', 'UserController@destroy')->name('users.destroy');
    });
    

    Esto asegurará que solo los usuarios autenticados puedan acceder a los métodos index y destroy en tu UserController.

Comments are closed.