我的应用程序中有2个角色,分别是admin
和former
。有关信息,权限也可以。
现在,我的问题是,如果用户Former
已连接。他可以看到标题“ Admin”,是否可以仅保留标题formers
?
您知道要在哪里进行更改吗? 我在控制器还是中间件之间犹豫不决?
在我的blade.php文件中,我有这个:
<li class="px-nav-item">
@if (!Auth::guest())
<a href="/admin"><i class="px-nav-icon ion-grid"></i><span class="px-nav-label">Listing admin</span></a>
@endif
</li>
<li class="px-nav-item">
@if (!Auth::guest())
<a href="/formers"><i class="px-nav-icon ion-grid"></i><span class="px-nav-label">Listing formers</span></a>
@endif
</li>
答案 0 :(得分:1)
您可以使用spatie
内置方法来获取当前的登录用户角色。
@if(in_array("admin", Auth::user()->roles->toArray()))
//if your login user role is admin show the content here
@endif
@if(in_array("former", Auth::user()->roles->toArray()))
//if your login user role is former show the content here
@endif
我没有测试这段代码,希望对您有帮助。
答案 1 :(得分:1)
一个好的解决方案是编写View Composer
来根据不同的条件(在您的情况下根据用户信息)创建菜单。
例如,您可以使用一个视图编辑器来创建一个链接项数组,然后在视图中访问该数组,并使用给定的链接项数组构建菜单:
<?php
namespace App\Providers;
use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;
class ViewServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
View::composer(
'layout', 'App\Http\View\Composers\MenuComposer'
);
}
}
<?php
namespace App\Http\View\Composers;
use Illuminate\View\View;
class ProfileComposer
{
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view)
{
$menu = [];
if (!\Auth::guest()) {
$menu[] = ['link' => '/admin', 'text' => 'Listing admin'];
}
if (!\Auth::guest()) {
$menu[] = ['link' => '/formers', 'text' => 'Listing formers'];
}
$view->with('menu', $menu);
}
}
因此,在您的layout.blade.php
中,您可以访问$menu
变量
@foreach($menu as $link)
<li class="px-nav-item">
<a href="{{$link['link']}}"><i class="px-nav-icon ion-grid"></i><span class="px-nav-label">{{$link['text']}}</span></a>
</li>
@endforeach
答案 2 :(得分:0)
如果您使用的是Spatie's Laravel-permission,则只需在Laravel刀片中执行此操作即可:
@role('admin')
//Show some button
@endrole
@role('former')
//Show some button
@endrole