laravel - 为未登录的人创建门
问题描述
我正在尝试使用 Laravel 创建一个网页。我有 3 种类型的用户:用户、成员、管理员。当有人注册时,他们就成为了用户。有一些限制区域只能由会员和管理员看到。我可以通过在刀片页面中使用门和@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')。
解决方案
我找到了答案,我想在这里分享给那些可能需要的人。
事实证明,答案非常简单。像这样包装你的内容。
@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
推荐阅读
- groovy - 具有包含点 (.) 的变量名称的 Groovy 列表被转换为字符串
- c++ - 在 C++ 中销毁动态分配的内存(数组对象)
- python - auth_user.username 给出 'NoneType' 对象没有属性 'username'
- python-3.x - 频繁或批量使用 REST API 端点自动提取事件
- python - 查找图像是亮还是暗
- r - bind_rows_(x, .id) 中的错误:参数 1 必须有名称
- c# - 如何捕获 System.IO.FileSystemWatcher 抛出的异常
- swift - CMSensorRecorder - 读取历史数据有时返回 nil
- javascript - Showing month name from users input using JS switch case
- php - .htaccess 301 路径 URL 重组?