用户的分层角色,子角色根据情况具有不同的权限,Laravel Spatie

问题描述 投票:0回答:1

在我尝试构建的应用程序中,我有两个门户,一个用于管理员,一个用于用户。在正常情况下,我可能对管理门户有不同的角色,即超级管理员、管理员等,而对于用户门户,我现在只有一个用户角色。

现在用户可以创建并加入多个群聊,并且在每个群聊中,用户可以是群管理员、群助理、普通参与者或旁观者。此外,群聊管理员可以允许或阻止具有特定角色的用户执行特定操作。例如,群聊管理员可以阻止具有普通参与者角色的用户在群聊中打字。管理员还可以选择阻止特定用户执行特定操作。

因此,用户应该拥有用户角色才能加入或创建群聊,并且可以在每个群聊中获得不同的子角色以及在不同群聊中横向获取不同的角色。 这可以通过 spatie/laravel-permission 包实现吗?

已经尝试过的:

到目前为止,我添加了一些表格和逻辑来完成工作,但我认为还有更好的方法。

  1. 我在角色表中添加了可能的群聊角色,即 group_admin、group_assistant、group_participant 等以及 super_admin、admin 和 user 角色。我给了群聊角色他们通常拥有的默认权限。

  2. 我创建了一个包含 group_chat_id、user_id 和 role_id 的 group_chat_users 表。这里的role_id应该仅限于群聊角色。这样我们就可以通过群聊为每个用户分配一个角色

  3. 我在 Spatie 的 Permissions 表旁边创建了一个附加表,即 revoked_model_permission_roles,其中包含以下列:model_type、model_id、revoked_type、revoked_id 和permission_id。 在这里,我们有相应的 model_type 和 model_id,在我的例子中是 group_chat 和 group_chat_id。我还有 revoked_type 和 revoked_id,它表示模型已被撤销,在这种情况下可以是整个角色(因此角色作为 revoked_type,role_id 作为 revoked_id)或特定用户(用户模型作为 revoked_type 和 user_id 作为已撤销_id)。最后是权限列,其中指出已为此用户或角色撤销的权限。

  4. 我创建了一个群聊策略,在其中检查具有群聊角色的用户是否具有执行操作的相应权限(我从 spatie 的默认 role_has_permissions 表中检查),以及该权限是否已被撤销(我从另一个表中检查我创建的 revoked_model_permission_roles。

php laravel permissions roles
1个回答
0
投票

通过 spatie 包您可以为每个角色创建权限。您需要创建角色并相应地为每个用户授予权限。您也可以通过为每个角色创建表来手动实现这一点,但这会需要更多工作。

© www.soinside.com 2019 - 2024. All rights reserved.