Как я могу показать или скрыть только часть моей таблицы для гостевых пользователей в Laravel?

У меня есть страница, на которой отображается таблица, я хочу скрыть только 1 столбец моей таблицы и показать только пользователю с ролью администратора.

Но я хочу показать другие столбцы моим гостевым пользователям, которые не вошли на мой сайт.
когда я сделаю это с помощью этого кода:

<table>
<tr>
<td>
...
</td>
@if(Auth::user()->isAdmin())
<td>
only Admins Can See This Column
</td>
@endif
<td>
...
</td>
</tr>
</table>

Он скрывает всю страницу и перенаправляет на вход и показывает только администраторам.

Но мне нужно показать все мои таблицы без этого столбца, чтобы настроить пользователей, которые не вошли в систему. Как мне это сделать?


person Amin Arjmand    schedule 12.04.2019    source источник


Ответы (3)


Вы можете использовать директиву @guest blade.

<table>
    <tr>
        <td>
        ...
        </td>
        @if(Auth::user()->isAdmin())
        <td>
            only Admins Can See This Column
        </td>
        @endif
        @guest
        <td>
           This is only for guest!
        </td>
        @endguest
        ...
        </td>
    </tr>
</table>
person Cristian Cosenza    schedule 12.04.2019
comment
ваши коды показывают мне эту ошибку: Call to a member function isAdmin() on null, я хочу скрыть от пользователей, не вошедших в систему, и @if(Auth::user()->isAdmin()) для случаев, когда пользователь вошел в систему, а не гости - person Amin Arjmand; 13.04.2019
comment
эта таблица находится на моей первой странице моего сайта, и я хочу скрыть один столбец для пользователей, которые не вошли в систему - person Amin Arjmand; 13.04.2019
comment
Я думал, что вы уже выполнили функцию isAdmin. Затем, если вам нужны роли / разрешения, вы можете использовать такой пакет, как spatie / laravel-permission - person Cristian Cosenza; 13.04.2019
comment
Я хочу разделить представление столбцов для моих гостевых пользователей, которые не вошли и не зарегистрировались на моем сайте, для пользователей мы можем использовать коды, как вы сказали, разрешение laravel не имеет роли для гостей-пользователей - person Amin Arjmand; 13.04.2019

Я нашел решение ::: Мы можем спрятаться для гостя и показать нашим ролевым пользователям с помощью этого кода:

<table>
    <tr>
        <td>
        ...
        </td>
        @if(Auth()->check() and Auth::user()->isAdmin())
        <td>
            only Admins Can See This Column
        </td>
        @endif
        <td>
           ...
        </td>
        ...
        </td>
    </tr>
</table>
person Amin Arjmand    schedule 13.04.2019

Если вы хотите скрыть пользователя-администратора и показать остальных пользователей, вы можете выполнить следующие действия.

В вашем контроллере: -

public function index(Request $request)
{
    $user = Auth::user();

    if ($user->hasRole('admin')) {
        $user = User::where('id', '!=', $user->id)->get();
    } else {
        $user = User::all();
    }
    return view('admin.users.index', compact('user'));
}

В вашем файле лезвия: -

@foreach($user as $users)
    @if(Auth::user()->hasRole('admin'))
        <tr>
            <td>{{$users->id}}</td>
            <td>{{$users->name}}</td>
            <td>{{$users->email}}</td>
            <td>{{$users->password}}</td>
            <td class="text-center">
                <a href="{{ route('users.edit', $users->id)}}" class="btn btn-primary btn-sm">Edit</a>
                <form action="{{ route('users.destroy', $users->id)}}" method="post" style="display: inline-block">
                    @csrf
                    @method('DELETE')
                    <button class="btn btn-danger btn-sm" type="submit">Delete</button>
                </form>
            </td>
        </tr>
    @endif
@endforeach
person Dhruvi Dilip Mewada    schedule 20.05.2021