为未登录的用户创建登机门

时间:2019-02-08 14:58:50

标签: laravel

我正在尝试使用Laravel创建一个网页。我有3种类型的用户:用户,成员,管理员。当某人注册时,他们成为用户。有些限制区域只能由成员和管理员看到。我可以通过在刀片页面中使用gates和@can使其达到那些限制。但是在某些部分中,我需要更改内容。例如,我想向访客和用户显示横幅,而在同一div中向成员和管理员显示消息。为了实现这一目标,我想在两件事上需要帮助:

  1. 如何为未登录的用户创建一个登机门(我们称其为访客)?我为访客尝试了以下替代方法,显然它们都不起作用,所以我来了。如果我显示Auth :: check(),则在我登录时返回1。我真的不明白为什么!= 1无效。

    Gate::define('visitors', function()
    {
        return Auth::user() == false;
        return Auth::user() == null;
        return Auth::check() == false;
        return Auth::check() == null;
        return Auth::check() != 1;
    });
    
  2. 如何将访问者和用户合并在一个门户中。因为在几乎每个实例中,都将允许访问者和用户看到相同的内容。我找不到任何合并访客和用户的方法。我尝试像@can('visitors','users')...一样将两个传递在一起,并创建两个具有相同名称的不同门,就像您在下面看到的那样,它们没有用。顺便说一句,用户的role_id为NULL。这仅是可用于区分成员和管理员的数据。

    Gate::define('visitors', function()
    {
        return Auth::user() == false;
    });
    Gate::define('visitors', function()
    {
        return is_null($user->role_id);
    });
    

感谢您的帮助。

编辑:经过2天的漫漫跋涉,事实证明我的问题的第一部分很容易解决。我所需要做的就是像这样包装内容:

@geust
   <div>Something nice</div>
@endauth

第二部分仍然打开。我需要同时使用@guest和@can('users')。

1 个答案:

答案 0 :(得分:0)

我找到了答案,我想在这里与那些需要的人分享。

  1. 事实证明,答案非常简单。像这样包装您的内容。

    @geust
       <div>Something nice</div>
    @endauth
    
  2. 我需要做的是创建一个将访问者和用户结合在一起的逻辑

    @if (Auth::user() && is_null(Auth::user()->role_id) || Auth::guest()) {
        <div>Something nice</div>
    @endif
    

奖金:我还设法创建了“自定义刀片指令”。如果您正在寻找类似的东西,这是我的例子。

    //AppServiceProvider.php

    use Auth;
    use Illuminate\Support\Facades\Blade;
    ...
    public function boot()
    {
        Blade::if('EveryoneElse', function(){
            return Auth::user() && is_null(Auth::user()->role_id) || Auth::guest();
        });
    }

在刀片模板文件中。

    @EveryoneElse
        <div>Something nice</div>
    @endEveryoneElse