委托@role和@permission指令不在刀片服务器laravel 5.6中呈现

时间:2018-08-11 12:08:55

标签: php laravel laravel-5 eloquent entrust

让我告诉你要点。

  1. 我正在使用https://github.com/Zizaco/entrust/的Entrust
  2. 我正在使用多重身份验证,即我有两个web表的users保护和admin表的admins保护。
  3. admins表中,有多个权限的用户(也有角色)。
  4. permission中间软件具有代码

    如果(!Auth :: guard('admin')-> user()-> can(explode('|',$ permissions)))

  5. 在我的Admin模型中,我使用了use EntrustUserTrait;

  6. Middelware permissionroutes.php上运行良好,我面临的唯一问题是,如果任何Admin User没有权限can-create,那么写的html该块应隐藏在刀片文件中。

@permission('can-create') Lorem Ipsum... @endpermission

以上刀片指令未突出显示为@if或@foreach等。

我认为我可能正在使用由于多重身份验证而引起的某些问题,因为Entrust默认采用users表。

考虑到这种情况,请赐教给我。

1 个答案:

答案 0 :(得分:0)

是的,我已经解决了这个问题。请按照我使用的步骤进行操作。

  1. 运行命令php artisan make:provider EntrustCustomServiceProvider
  2. 转到app/Providers/EntrustCustomServiceProvider.php
  3. Use Auth;并写入boot函数

    公共功能boot() {

    \Blade::directive('permission', function($expression) {
        return "<?php if (Auth::guard('admin')->user()->can({$expression})) : ?>";
    });
    
    \Blade::directive('endpermission', function($expression) {
        return "<?php endif; ?>";
    });
    

    }

  4. 将此条目添加到config/app.php中的providers数组中:App\Providers\EntrustCustomServiceProvider::class,

还有一件事,许多phpstorm用户可能会想知道为什么这些指令没有在编辑器中自动填充,然后请注意,每当我们添加自定义的刀片指令时,我们都需要在phpstorm编辑器的Blade插件中添加这些指令。 解决方法如下:

  1. 转到File->settings->php->Blade
  2. 取消选中Default Settings,转到Directives标签。
  3. 使用+
  4. 添加新指令
  5. 在不使用@的情况下在此处permission输入指令名称,选中has parameter
  6. 在前缀中输入<?php if (Auth::guard('admin')->user()->can(,在后缀中输入)):?>
  7. @endpermission相同,但不添加任何参数。

我希望这对像我这样的人有帮助:)