Laravel 5.1 @can,如何使用OR子句

Mar*_*m54 26 laravel blade laravel-5.1 laravel-blade

我没有找到如何在@can视图中使用子句(OR,AND)来检查多个异能......

我试过了:

@can(['permission1', 'permission2']) 
@can('permission1' or 'permission2')
@can('permission1' || 'permission2')
Run Code Online (Sandbox Code Playgroud)

但是不行;(

tom*_*mmy 33

您可以使用门面:

@if(Gate::check('permission1') || Gate::check('permission2'))

@endif
Run Code Online (Sandbox Code Playgroud)


Jas*_*ers 19

@canany刀片指令已于2018年5月24日添加到Laravel v.5.6.23中

用法:

@canany(['edit posts', 'delete posts'])
    <div class="actions">
        @can('edit posts')
            <button>Edit post</button>
        @endcan
        @can('delete posts')
            <button>Delete post</button>
        @endcan
    </div>
@endcanany
Run Code Online (Sandbox Code Playgroud)

  • 不知道@canany 是否支持传递策略模型?例如使用@ can 你可以做@ can('edit', 'App\Post')。 (2认同)

Sim*_*hin 6

我在Laravel 5.4应用程序中添加了这个指令,允许我@canany('write|delete')在刀片视图中使用新指令.

// AppServiceProvider.php@boot()

Blade::directive('canany', function ($arguments) {
    list($permissions, $guard) = explode(',', $arguments.',');

    $permissions = explode('|', str_replace('\'', '', $permissions));

    $expression = "<?php if(auth({$guard})->check() && ( false";
    foreach ($permissions as $permission) {
        $expression .= " || auth({$guard})->user()->can('{$permission}')";
    }

    return $expression . ")): ?>";
});

Blade::directive('endcanany', function () {
    return '<?php endif; ?>';
});
Run Code Online (Sandbox Code Playgroud)

刀片视图中的示例:

@canany('write|create')
    ...
@endcanany
Run Code Online (Sandbox Code Playgroud)

这是在5.4上扩展Blade文档