我正在尝试在我的应用程序中实现这种类型的管理。因为我之前没有做过类似的事情,所以这是我遵循的指南:https://www.honeybadger.io/blog/user-roles-permissions-in-laravel/
它的作用就像一个魅力!
我想做的是更改迁移以更改表(它们在每个项目中都可以立即工作)新表遵循相同的逻辑,但问题来自于
model_type
表中的 model_has_permissions
列。我删除了此列并将 model_id
更改为引用我的 user_id
以使其看起来更简单。但在每个查询中,应用程序都会添加 model_has_permissions.model_type
来解决错误。
我想知道你们中有人以前做过这个实现吗?您对编辑什么以从查询中删除此列有什么想法吗?
非常接受任何和所有帮助!
您将覆盖模型
创建您自己的包提供的
Permission
和 Role
模型版本。在这些模型中,您可以覆盖引用旧结构的关系和方法。具体来说,您需要更新 users
、roles
和权限关系以使用修改后的表。
// CustomPermission.php
namespace App\Models;
use Spatie\Permission\Models\Permission as BasePermission;
class CustomPermission extends BasePermission
{
public function users()
{
return $this->belongsToMany(User::class, 'custom_model_has_permissions', 'model_id', 'permission_id');
}
}
// CustomRole.php
namespace App\Models;
use Spatie\Permission\Models\Role as BaseRole;
class CustomRole extends BaseRole
{
public function users()
{
return $this->belongsToMany(User::class, 'custom_model_has_roles', 'model_id', 'role_id');
}
}
自定义包的服务提供者
在 Laravel 应用程序的服务提供者中,您可以将自定义模型绑定到包的接口。这样,当包通过其接口访问模型时,它将使用具有更新关系的自定义模型。