【问题标题】:how to restrict access to certain parts of a view laravel如何限制对视图某些部分的访问 laravel
【发布时间】:2019-12-28 05:48:07
【问题描述】:

如果用户不是访客/管理员不应该看到,我想限制视图的某些部分。应用程序有 3 个用户 admin、vendor、customer

 @if (Auth::check() && !Auth::user()->role == 'customer') 
     <div class="collapse show" id="users-nav">
         <ul class="nav nav-sm flex-column">
             <li class="nav-item">
                 <a class="nav-link" href="{{ route('profile.edit') }}">
                     {{ __('User Profile') }}
                 </a>
             </li>

我得到了错误

供应商也没有看到那部分,我希望他和管理员一起看到

【问题讨论】:

  • 请您说明您在哪里声明了customer() 函数?
  • 对于 Blade 中的简单身份验证检查,您可以使用 @auth/@endauth@guest/@endguest 包装不应显示的代码部分。
  • 我已经更新了我的代码@dparoli

标签: php laravel access-control


【解决方案1】:

您应该从这里更改您的if clause

@if (Auth::check() && !Auth::user()->role == 'customer') 

到这里:

@if (Auth::check() && !(Auth::user()->role == 'customer')) 

或者这个(如@miken32所指出的),更容易阅读:

@if (Auth::check() && (Auth::user()->role !== 'customer')) 

第一个总是假的,注意圆括号。

【讨论】:

  • 我会说Auth::user()-&gt;role !== 'customer' 会更明确。
  • @miken32你可能是对的我的大脑被&amp;&amp; !扭曲了,我只知道OP发布的条款总是错误的:)
  • @Allgeekish 如果它解决了您发布的问题,请考虑接受答案
【解决方案2】:

Blade 提供了几个用于检查用户是否登录的快捷方式。例如:

@auth
    <p>Only logged in users can view this</p>
    <a href="/logout">Logout</a>
@endauth

@guest
    <p>Only non-logged in users can view this</p>
    <a href="/login">Login</a>
@endguest

您可以在此处查看其他刀片模板 if 语句:https://laravel.com/docs/5.8/blade#if-statements

【讨论】:

  • 问题是我有 3 个级别的用户客户、管理员、供应商我希望用户不要查看视图刀片的那部分。只有供应商和管理员
  • 对不起,我现在明白了。 dparoli 的解决方案似乎可以实现您的目标。
猜你喜欢
  • 2014-10-10
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2012-07-18
  • 2017-11-05
相关资源
最近更新 更多