当特定角色通过身份验证时让按钮消失
Let button disappear when certain role is authenticated
我有两个不同的表,其中存储了两种不同类型的用户。
第一个是门户用户,第二个是员工。
现在我有一个所有帖子的概览页面,Portal 用户应该可以在其中使用部门的筛选按钮。
员工也应该能够使用它,如果他们的角色不是“FBL”的话。
所以我用这段代码试了一下:
@if(auth()->user()->Rolle != 'FBL')
<div class="text-left mb-4 h-12">
<select name="abteilung" id="abteilung" class="h-full w-full flex justify-center bg-white bg-opacity-95 rounded focus:ring-2 border border-gray-300 focus:border-indigo-500 text-base
outline-none text-gray-700 text-lg text-center leading-8">
<option selected="true" disabled="false">Abteilung</option>
@foreach($abteilungs as $abteilung)
<option value="{{ $abteilung->abteilung_name }}">{{ $abteilung->abteilung_name }}</option>
@endforeach
<option value="alle">Alle Abteilungen</option>
</select>
</div>
@endif
但是当没有人通过身份验证时,访客正在使用该页面,我得到一个错误 Attempt to read property "Rolle" on null
- 这是有道理的,因为没有人通过身份验证。
但我也试过把它放在 @if
:
之前
@auth('web')
@auth('portal')
@auth('guest')
我有两个守卫,一个是默认 laravel 守卫,第二个是我为门户用户自定义的 portal
守卫。
我有什么方法可以使它起作用,以便当来宾、门户用户和没有“Rolle = FBL”的员工时按钮可用,但当具有此特定角色的人登录时该按钮消失在?
您需要在尝试访问用户对象之前检查用户是否已登录。
要让 Rolle
而非 FBL
的来宾和用户看到它,请使用:
@if( ! auth()->check() || auth()->user()->Rolle != 'FBL')
https://laravel.com/docs/8.x/authentication#determining-if-the-current-user-is-authenticated
您需要使用嵌套的 if 语句,即
// 检查用户是来宾、门户用户还是员工
if user == guest
{
// write the code here for what guest should see
}
// so user is not guest
else
{
// check if user is employee or portal user
if user == employee
{
// write the code here for what employee should see
}
// user is not employee so user is portal user
else
{
// write the code here for what portal use should see
}
}
我认为,在你的情况下,最好的解决方案是:
1:检查用户是否登录
2:检查角色,但我不会写太多“如果”,而是这样做(按照您的代码)
//In your folder providers->AppServiceProvider.php -> method "boot"
public function boot()
{
Blade::if('notfbl', function (User $user) { // you name it as you want I named it "notfbl", the parameter is the logged user
return $user->id == auth()->user()->role_id != 1; // Here I assumed that the id of the FBL role is 1, you adjust it
});
}
// 在你的 blade 文件中,你可以在你需要的每个部分使用“@notfbl($user)”,还可以创建更多
@auth // Everything inside "@auth" will be shown ONLY if the user is authenticated. If you want to do something for unauthenticated users you should write your html/code inside the "@guest @endguest" tags
@notfbl($user) // It will be shown ONLY for users with role different to FBL
<div class="text-left mb-4 h-12">
<select name="abteilung" id="abteilung" class="h-full w-full
flex justify-center bg-white bg-opacity-95 rounded focus:ring-2 border border-gray-300 focus:border-indigo-500 text-base outline-none text-gray-700 text-lg text-center leading-8">
<option selected="true" disabled="false">Abteilung</option>
@foreach($abteilungs as $abteilung)
<option value="{{ $abteilung->abteilung_name }}">{{ $abteilung->abteilung_name }}</option>
@endforeach
<option value="alle">Alle Abteilungen</option>
</select>
</div>
@endnotfbl
@endauth
我有两个不同的表,其中存储了两种不同类型的用户。
第一个是门户用户,第二个是员工。
现在我有一个所有帖子的概览页面,Portal 用户应该可以在其中使用部门的筛选按钮。
员工也应该能够使用它,如果他们的角色不是“FBL”的话。
所以我用这段代码试了一下:
@if(auth()->user()->Rolle != 'FBL')
<div class="text-left mb-4 h-12">
<select name="abteilung" id="abteilung" class="h-full w-full flex justify-center bg-white bg-opacity-95 rounded focus:ring-2 border border-gray-300 focus:border-indigo-500 text-base
outline-none text-gray-700 text-lg text-center leading-8">
<option selected="true" disabled="false">Abteilung</option>
@foreach($abteilungs as $abteilung)
<option value="{{ $abteilung->abteilung_name }}">{{ $abteilung->abteilung_name }}</option>
@endforeach
<option value="alle">Alle Abteilungen</option>
</select>
</div>
@endif
但是当没有人通过身份验证时,访客正在使用该页面,我得到一个错误 Attempt to read property "Rolle" on null
- 这是有道理的,因为没有人通过身份验证。
但我也试过把它放在 @if
:
@auth('web')
@auth('portal')
@auth('guest')
我有两个守卫,一个是默认 laravel 守卫,第二个是我为门户用户自定义的 portal
守卫。
我有什么方法可以使它起作用,以便当来宾、门户用户和没有“Rolle = FBL”的员工时按钮可用,但当具有此特定角色的人登录时该按钮消失在?
您需要在尝试访问用户对象之前检查用户是否已登录。
要让 Rolle
而非 FBL
的来宾和用户看到它,请使用:
@if( ! auth()->check() || auth()->user()->Rolle != 'FBL')
https://laravel.com/docs/8.x/authentication#determining-if-the-current-user-is-authenticated
您需要使用嵌套的 if 语句,即
// 检查用户是来宾、门户用户还是员工
if user == guest
{
// write the code here for what guest should see
}
// so user is not guest
else
{
// check if user is employee or portal user
if user == employee
{
// write the code here for what employee should see
}
// user is not employee so user is portal user
else
{
// write the code here for what portal use should see
}
}
我认为,在你的情况下,最好的解决方案是:
1:检查用户是否登录
2:检查角色,但我不会写太多“如果”,而是这样做(按照您的代码)
//In your folder providers->AppServiceProvider.php -> method "boot"
public function boot()
{
Blade::if('notfbl', function (User $user) { // you name it as you want I named it "notfbl", the parameter is the logged user
return $user->id == auth()->user()->role_id != 1; // Here I assumed that the id of the FBL role is 1, you adjust it
});
}
// 在你的 blade 文件中,你可以在你需要的每个部分使用“@notfbl($user)”,还可以创建更多
@auth // Everything inside "@auth" will be shown ONLY if the user is authenticated. If you want to do something for unauthenticated users you should write your html/code inside the "@guest @endguest" tags
@notfbl($user) // It will be shown ONLY for users with role different to FBL
<div class="text-left mb-4 h-12">
<select name="abteilung" id="abteilung" class="h-full w-full
flex justify-center bg-white bg-opacity-95 rounded focus:ring-2 border border-gray-300 focus:border-indigo-500 text-base outline-none text-gray-700 text-lg text-center leading-8">
<option selected="true" disabled="false">Abteilung</option>
@foreach($abteilungs as $abteilung)
<option value="{{ $abteilung->abteilung_name }}">{{ $abteilung->abteilung_name }}</option>
@endforeach
<option value="alle">Alle Abteilungen</option>
</select>
</div>
@endnotfbl
@endauth