Laravel 5.1 @can, how use OR clause

旧时模样 提交于 2020-01-01 03:53:06

问题


I did not find how to use a clause (OR, AND) in view with @can, for checking multiple abilities ...

I tried:

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

But dont work ;(


回答1:


You can use the Gate facade:

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

@endif



回答2:


The @canany blade directive has been added to Laravel v.5.6.23 on May 24, 2018

Usage:

@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



回答3:


I've added this directive in my Laravel 5.4 app that allows me to use a new @canany('write|delete') directive in my blade views.

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

Example in blade view:

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

Here's the doc for extending Blade on 5.4




回答4:


You can call @can multiple times.

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

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



回答5:


Use can method on Authenticated User,

@if ( Auth::user()->can('permission1', App\Model::class) || Auth::user()->can('permission2',  App\Model::class) )

@endif


来源:https://stackoverflow.com/questions/34188461/laravel-5-1-can-how-use-or-clause

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!