如何在Laravel Blade视图中校验Admin中间件 给管理员展示指定导航链接
实现方法
你已经在用户表加了is_admin标识字段,直接在Blade视图层做判断就能实现导航链接的显隐控制,你写的Admin中间件更适合用于路由层面的访问拦截,两者搭配使用更安全。以下是两种常用实现方案:
方案1:直接在导航栏模板写判断逻辑
这是最简单的实现方式,不需要额外配置,直接在需要控制的链接外层套权限判断即可:
@auth {{-- 所有登录用户都可见的链接 --}} <a href="{{ route('user.dashboard') }}">个人中心</a> {{-- 仅管理员可见的链接 --}} @if(Auth::check() && Auth::user()->is_admin == 1) <a href="{{ route('admin.dashboard') }}">管理后台</a> <a href="{{ route('admin.user_manage') }}">用户管理</a> @endif @endauth
方案2:自定义Blade指令(适合多场景复用)
如果项目多处需要判断管理员权限,可以封装自定义Blade指令,后续调用更简洁:
- 首先在
app/Providers/AppServiceProvider.php的boot方法中注册指令:
use Illuminate\Support\Facades\Blade; public function boot() { Blade::if('admin', function () { return auth()->check() && auth()->user()->is_admin === 1; }); }
- 之后在任意Blade模板中都可以直接使用
@admin指令:
@auth {{-- 普通登录用户可见链接 --}} <a href="{{ route('user.dashboard') }}">个人中心</a> {{-- 仅管理员可见区域 --}} @admin <a href="{{ route('admin.dashboard') }}">管理后台</a> <a href="{{ route('admin.user_manage') }}">用户管理</a> @endadmin @endauth
重要提示:视图层的显隐只是前端展示控制,所有管理员相关的路由必须绑定你编写的Admin中间件做访问拦截,避免普通用户直接输入URL访问管理员功能,路由配置示例:
// 管理员路由组 Route::prefix('admin')->middleware('admin')->group(function () { Route::get('dashboard', [AdminController::class, 'dashboard'])->name('admin.dashboard'); Route::get('user_manage', [AdminController::class, 'userManage'])->name('admin.user_manage'); });
内容的提问来源于stack exchange,提问作者Osama Amr
相关产品推荐
相关产品推荐

