委托@role 和@permission 指令不在blade、laravel 5.6 中呈现
Entrust @role and @permission directives not rendering in blade, laravel 5.6
让我告诉你要点。
- 我正在使用 https://github.com/Zizaco/entrust/
的委托
- 我正在使用 multi-auth 即我有 2 个守卫作为
web
用于 users
table 和 admin
守卫用于 admins
table.
- 在
admins
table 中有多个用户(也有角色)。
permission
中间件有代码
if (!Auth::guard('admin
')->user()->can(explode('|', $permissions)))
在我的Admin
模型中,我使用了use EntrustUserTrait;
中间件 permission
在 routes.php
上工作正常 我面临的唯一问题是如果任何 Admin User
没有权限假设 can-create
那么html 写在那个块中应该隐藏在 blade 文件中。
@permission('can-create')
Lorem Ipsum...
@endpermission
上面的 blade 指令没有突出显示为 @if 或 @foreach 等
我认为我正在使用 multi-auth,因为 Entrust 默认采用 users
table。
考虑到这种情况,请赐教。
是的,我找到了这个问题的解决方案。请完成我使用的步骤。
- 运行命令
php artisan make:provider EntrustCustomServiceProvider
- 转到
app/Providers/EntrustCustomServiceProvider.php
Use Auth;
并写入boot
函数
public 函数引导()
{
\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
的提供者数组中添加此条目:App\Providers\EntrustCustomServiceProvider::class,
还有一件事,许多 phpstorm 用户可能想知道为什么这些指令没有在编辑器中自动填充然后请注意,无论何时我们添加自定义 blade 指令,我们都需要在 phpstorm 的 blade 插件中添加它们编辑。
这是解决方案:
- 转到
File->settings->php->Blade
- 取消选中
Default Settings
,转到 Directives
选项卡。
- 使用
+
添加新指令
- 输入指令名,这里
permission
不使用@,勾选has parameter
- 在前缀中输入
<?php if (Auth::guard('admin')->user()->can(
,在后缀中输入 )):?>
- 对
@endpermission
也一样,但不添加任何参数。
我希望这对像我这样的人有帮助:)
让我告诉你要点。
- 我正在使用 https://github.com/Zizaco/entrust/ 的委托
- 我正在使用 multi-auth 即我有 2 个守卫作为
web
用于users
table 和admin
守卫用于admins
table. - 在
admins
table 中有多个用户(也有角色)。 permission
中间件有代码if (!Auth::guard('
admin
')->user()->can(explode('|', $permissions)))在我的
Admin
模型中,我使用了use EntrustUserTrait;
中间件
permission
在routes.php
上工作正常 我面临的唯一问题是如果任何Admin User
没有权限假设can-create
那么html 写在那个块中应该隐藏在 blade 文件中。
@permission('can-create')
Lorem Ipsum...
@endpermission
上面的 blade 指令没有突出显示为 @if 或 @foreach 等
我认为我正在使用 multi-auth,因为 Entrust 默认采用 users
table。
考虑到这种情况,请赐教。
是的,我找到了这个问题的解决方案。请完成我使用的步骤。
- 运行命令
php artisan make:provider EntrustCustomServiceProvider
- 转到
app/Providers/EntrustCustomServiceProvider.php
Use Auth;
并写入boot
函数public 函数引导() {
\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
的提供者数组中添加此条目:App\Providers\EntrustCustomServiceProvider::class,
还有一件事,许多 phpstorm 用户可能想知道为什么这些指令没有在编辑器中自动填充然后请注意,无论何时我们添加自定义 blade 指令,我们都需要在 phpstorm 的 blade 插件中添加它们编辑。 这是解决方案:
- 转到
File->settings->php->Blade
- 取消选中
Default Settings
,转到Directives
选项卡。 - 使用
+
添加新指令
- 输入指令名,这里
permission
不使用@,勾选has parameter
- 在前缀中输入
<?php if (Auth::guard('admin')->user()->can(
,在后缀中输入)):?>
- 对
@endpermission
也一样,但不添加任何参数。
我希望这对像我这样的人有帮助:)