【问题标题】:Laravel 8: Problem creating and using a a new PermissionLaravel 8:创建和使用新权限的问题
【发布时间】:2021-04-01 10:30:28
【问题描述】:

我的本​​地 Windows PC 上有一个 Laravel 8 项目。我通过 zip 文件将项目上传到 Dreamhost 上的共享虚拟主机,并将整个数据库复制到远程主机。 (我无法在远程服务器上使用 Composer 和 php artisan 命令)我在我的项目中使用 Spatie 角色和权限。

后来我不得不在我的项目中添加一个新的权限“holiday_vacation”。我在本地系统上使用工匠命令创建了新权限 我相信当创建新权限时,它会在 permissions 表中添加一条新记录,并且当用户被授予对特定权限的访问权限时,会添加一条记录到model_has_permissions 表。我相信在此过程中不会更改其他表。新创建的“holiday_vacation”权限在我的本地系统上运行良好。

但是,在我手动更新远程表(permissions 和 model_has_permissions)后,远程系统无法找到新的权限(holiday_vacation)。控制器中的以下命令显示错误消息“没有名为 holiday_vacation 的权限用于保护 web。”

if(auth()->user()->hasPermissionTo('holiday_vacation') )
{
    dd("Has access");
}

当我将权限表和 model_has_permissions 表从本地数据库复制到远程数据库时,我绝对确定权限表具有 holiday_vacation 权限。

关于这个问题的谷歌搜索谈到了清除权限缓存(例如 php artisan cache:forget spatie.permission.cache 然后 php artisan cache:clear)。不幸的是,我无法在共享主机上执行 php artisan 命令。

有人可以提供解决方法吗?

【问题讨论】:

  • 您使用的是什么缓存驱动程序? (另外,是时候放弃共享主机了。)
  • 您可以尝试通过执行app()[Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();来删除缓存。

标签: laravel laravel-permission


【解决方案1】:

@BABAK ASHRAFI 的评论起到了作用,只是需要稍微修改命令。 (参考:https://spatie.be/docs/laravel-permission/v3/advanced-usage/cache

app()->make(\Spatie\Permission\PermissionRegistrar::class)->forgetCachedPermissions();

【讨论】:

  • 如果它解决了您的问题,请将其标记为已接受的答案
  • 仅供参考:如果类被容器绑定,那么 @babak-ashrafi 的解决方案也应该可以工作。
猜你喜欢
  • 2013-01-15
  • 1970-01-01
  • 2023-03-15
  • 2010-10-11
  • 2011-09-17
  • 2021-02-02
  • 2021-12-11
  • 2020-11-24
  • 1970-01-01
相关资源
最近更新 更多