让我告诉你要点。
web
表的users
保护和admin
表的admins
保护。admins
表中,有多个权限的用户(也有角色)。 permission
中间软件具有代码
如果(!Auth :: guard('admin
')-> user()-> can(explode('|',$ permissions)))
在我的Admin
模型中,我使用了use EntrustUserTrait;
Middelware permission
在routes.php
上运行良好,我面临的唯一问题是,如果任何Admin User
没有权限can-create
,那么写的html该块应隐藏在刀片文件中。
@permission('can-create')
Lorem Ipsum...
@endpermission
以上刀片指令未突出显示为@if或@foreach等。
我认为我可能正在使用由于多重身份验证而引起的某些问题,因为Entrust默认采用users
表。
考虑到这种情况,请赐教给我。
答案 0 :(得分:0)
是的,我已经解决了这个问题。请按照我使用的步骤进行操作。
php artisan make:provider EntrustCustomServiceProvider
app/Providers/EntrustCustomServiceProvider.php
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; ?>";
});
}
将此条目添加到config/app.php
中的providers数组中:App\Providers\EntrustCustomServiceProvider::class,
还有一件事,许多phpstorm用户可能会想知道为什么这些指令没有在编辑器中自动填充,然后请注意,每当我们添加自定义的刀片指令时,我们都需要在phpstorm编辑器的Blade插件中添加这些指令。 解决方法如下:
File->settings->php->Blade
Default Settings
,转到Directives
标签。+
permission
输入指令名称,选中has parameter
<?php if (Auth::guard('admin')->user()->can(
,在后缀中输入)):?>
@endpermission
相同,但不添加任何参数。我希望这对像我这样的人有帮助:)