我正在尝试使用Laravel创建一个网页。我有3种类型的用户:用户,成员,管理员。当某人注册时,他们成为用户。有些限制区域只能由成员和管理员看到。我可以通过在刀片页面中使用gates和@can使其达到那些限制。但是在某些部分中,我需要更改内容。例如,我想向访客和用户显示横幅,而在同一div中向成员和管理员显示消息。为了实现这一目标,我想在两件事上需要帮助:
如何为未登录的用户创建一个登机门(我们称其为访客)?我为访客尝试了以下替代方法,显然它们都不起作用,所以我来了。如果我显示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;
});
如何将访问者和用户合并在一个门户中。因为在几乎每个实例中,都将允许访问者和用户看到相同的内容。我找不到任何合并访客和用户的方法。我尝试像@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')。
答案 0 :(得分:0)
我找到了答案,我想在这里与那些需要的人分享。
事实证明,答案非常简单。像这样包装您的内容。
@geust
<div>Something nice</div>
@endauth
我需要做的是创建一个将访问者和用户结合在一起的逻辑
@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