You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8使用Laratrust时如何在Blade中同时校验角色和权限

Laravel Laratrust 同时校验角色和权限的实现方法

你可以通过以下三种常见方式实现「满足指定角色或指定权限任意一个即通过校验」的逻辑:

方案1:直接使用原生@if 条件拼接

这种方式无需额外配置,灵活性最高,可自由组合各种校验规则:

{{-- 逻辑:是admin角色 或者 有add_user权限 就显示按钮 --}}
@if(auth()->check() && (auth()->user()->hasRole('admin') || auth()->user()->hasPermission('add_user')))
    <a href="{{ route('add_user') }}">创建新用户</a>
@endif

提示:这里额外加了auth()->check()判断,避免未登录场景下调用用户方法抛出错误

方案2:使用Laratrust内置的@ability指令

Laratrust官方提供了@ability指令原生支持多角色、多权限的组合校验,只需将第四个参数$requireAll设为false即可实现「满足任意一个就通过」的逻辑:

@ability('admin', 'add_user', [], false)
    <a href="{{ route('add_user') }}">创建新用户</a>
@endability

参数说明:第一个参数为角色(多个用英文逗号分隔),第二个为权限(多个用英文逗号分隔),第三个为多团队场景的团队标识(无多团队需求留空数组即可),第四个参数设为false代表不需要全部满足。

方案3:自定义Blade指令(适合高频使用场景)

如果项目中大量需要用到这类组合校验,可以自定义专属的Blade指令,简化视图层写法:

  1. 打开app/Providers/AppServiceProvider.php,在boot方法中注册指令:
<?php

namespace App\Providers;

use Illuminate\Support\Facades\Blade;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        // 自定义角色或权限校验指令
        Blade::if('hasRoleOrPermission', function (string $role, string $permission) {
            return auth()->check() && (
                auth()->user()->hasRole($role) 
                || auth()->user()->hasPermission($permission)
            );
        });
    }
}
  1. 注册完成后即可在所有Blade视图中直接调用:
@hasRoleOrPermission('admin', 'add_user')
    <a href="{{ route('add_user') }}">创建新用户</a>
@endhasRoleOrPermission

额外提示:你原来视图中href="route({{'add_user'}})"的写法是错误的,正确的路由生成写法应该是href="{{ route('add_user') }}"。

内容的提问来源于stack exchange,提问作者Mokhtar Ghaleb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:06:03