Laravel 5.1 @can, how use OR clause

后端 未结 8 1341
日久生厌
日久生厌 2021-02-06 22:40

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

I tried:

@can([\'permission1\', \'permission2\']) 
@c         


        
相关标签:
8条回答
  • 2021-02-06 23:12

    Use can method on Authenticated User,

    @if ( Auth::user()->can('permission1', App\Model::class) || Auth::user()->can('permission2',  App\Model::class) )
    
    @endif
    
    0 讨论(0)
  • 2021-02-06 23:21

    You can use the Gate facade:

    @if(Gate::check('permission1') || Gate::check('permission2'))
    
    @endif
    
    0 讨论(0)
  • 2021-02-06 23:21

    @if(Gate::check('manage-users') || Gate::check('add-new-user')) Manage Users

  •     <li>
          <a href="{{url('/back/users')}}">
            <i class="feather icon-users"></i>
           <span class="menu-item" data-i18n="users">Manage Users</span>
            </a>
        </li>
    

    @endif

0 讨论(0)
  • 2021-02-06 23:25

    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
    
    0 讨论(0)
  • 2021-02-06 23:25

    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

    0 讨论(0)
  • 2021-02-06 23:28

    just use @canany(['permision1','permision2'])

    0 讨论(0)
  • 提交回复
    热议问题