基于用户角色团队的包无法管理团队范围之外的授权

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

在我的应用程序中,一个组织有多个事件,一个用户可以在不同的事件中扮演多个角色,直到现在一切都很好我可以做一个枢轴关系顺便说一句

user_id, role_id, event_id
,但问题是我有一些角色是专注于组织例如:
Owner, Admin
并且它们与事件无关。因此,以前的数据库结构无法解决我的问题,因为它仅限于在事件中具有角色的用户。 我已经尝试过建立多态关系,这基本上意味着用户可以在事件或组织中扮演这样的角色:
user_id, role_id, entity_id, entity_type
,但这需要很多工作,我不知道这是否是理想的解决方案。

我试过的:

我找到的一个解决方案是使用支持团队的 spatie 权限包。 所以基本上一个用户可以在一个事件中扮演一个角色,一个用户也可以在一个事件中拥有权限,所以我想我使用组织的范围而不是事件的范围,然后授予用户访问特定事件的权限。例如:我邀请一个用户到

organization
成为一个
Admin
,然后授予他管理特定事件或多个事件的权利(许可)。 这似乎可行,但问题是我仅限于为该组织中的用户分配一个角色,这意味着在所有事件中,因为现在数据库关系是:
user_id, role_id, organization_id
.

有什么办法可以为用户在不同的事件中分配不同的角色,以及为某些用户在事件之外分配一些角色的能力吗?

laravel entity-relationship multi-tenant user-roles spatie-permissions
2个回答
0
投票

如果这对你有用,你会尝试跟随吗?

创建一个表格

user_event_roles

它的结构会像

user_event_roles

id | user_id | event_id | role_id | created_at | updated_at | updated_at |
--------------------------------------------------------------------------

您可以在

user_id
中存储用户的ID及其事件的ID
event_id
(用户可以访问该事件),并存储
role_id
,即您要分配给用户的角色。

如果此方法不起作用,请分享您的反馈,以便我们找到其他解决方案。


0
投票

最终,经过搜索和询问其他高级工程师,我最终选择了多态解决方案,我什至向ChatGPT提出了我的解决方案,并得到了同意。尽管它一开始给出了另一个答案,但在提出我的解决方案后,它同意这是最优的。 我正在发布它对解决方案的解释,我认为它描述得很好:

免责声明:我是提出该解决方案的人!!我刚刚问了 ChatGPT 是否有更好的解决方案,她给了我一个我的建议的回顾。

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