如何在 Laravel 中仅向访客用户显示或隐藏我的表的一部分?

Posted

技术标签:

【中文标题】如何在 Laravel 中仅向访客用户显示或隐藏我的表的一部分?【英文标题】:How Can I Show Or Hide Only A Part Of My Table To Guest Users In Laravel? 【发布时间】:2019-09-03 16:10:37 【问题描述】:

我有一个显示表格的页面,我只想隐藏表格的 1 列,并且只显示给管理员用户角色。

但我想向尚未登录我网站的访客用户显示其他列。 当我使用此代码时:

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

它隐藏所有页面并重定向到登录并仅显示给管理员用户。

但是我需要向未登录的 guset 用户显示所有没有该列的表格,我应该怎么做?

【问题讨论】:

【参考方案1】:

你可以使用@guest刀片的指令。

<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>

【讨论】:

您的代码向我显示了此错误:Call to a member function isAdmin() on null,我想对 未登录用户 隐藏,@if(Auth::user()-&gt;isAdmin()) 用于用户登录而非访客时跨度> 此表在我网站的第一页上,我想为未登录的用户隐藏其中的一列 我以为你已经完成了isAdmin功能。然后,如果你想要角色/权限,你可以使用 spatie/laravel-permission 之类的包 我想为未在我的网站上登录和注册的访客用户分离列视图,对于用户我们可以使用您所说的代码,laravel 权限对访客用户没有作用【参考方案2】:

我找到了解决方案 ::: 我们可以通过此代码为访客隐藏并显示给我们的角色用户:

<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>

【讨论】:

【参考方案3】:

如果您想隐藏管理员用户并显示其余用户,您可以按照以下步骤操作。

在你的控制器中:-

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

【讨论】:

以上是关于如何在 Laravel 中仅向访客用户显示或隐藏我的表的一部分?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oro CRM 中仅向一个布局更新操作添加条件?

如何在php laravel中用户选择无线电输入的字段中隐藏或显示?

仅向某些用户或组显示 Joomla K2 额外字段

在 Woocommerce 中仅向 PayPal 发送订单号而不是商品名称

Laravel Echo - 允许访客连接到出席频道

如何仅向用户显示一次弹出窗口