Подтвердить что ты не робот

Laravel 5.1 @can, как использовать предложение OR

Я не нашел, как использовать предложение (OR, AND) в поле зрения @can для проверки нескольких способностей...

Я пробовал:

@can(['permission1', 'permission2']) 
@can('permission1' or 'permission2')
@can('permission1' || 'permission2')

Но не работает, (

4b9b3361

Ответ 1

Вы можете использовать фасад Gate:

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

@endif

Ответ 2

Я добавил эту директиву в свое приложение Laravel 5.4, которое позволяет мне использовать новую директиву @canany('write|delete') в моих видах.

// [email protected]()

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; ?>';
});

Пример просмотра лезвия:

@canany('write|create')
    ...
@endcanany

Здесь doc для расширения Blade на 5.4

Ответ 3

Вы можете вызвать @can несколько раз.

@if (@can ('permission1') || @can ('permission2'))

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