我们正在构建我们的 API,并寻找一种有组织的方式来根据用户拥有的角色和权限授予用户访问权限。
从起点开始,我们有 3 个角色
- 管理员:可以获取和编辑其组织中的所有内容
- 团队管理员:只能获取和编辑他的团队信息和用户信息
- 用户:可以任意编辑自己的信息
实体
- 团队
- 用户
对于安全过滤器:
- 我们使用带有安全角色的 JAX-RS 和 @RoleAllowed 来过滤对资源的访问
通过 if/then/else 函数进行基于 ID 的过滤。团队管理员访问用户的示例。
函数isAllowAccess(teamAdminId,userId){ allowedUserIdsList = queryfor(teamAdminId); if (userId in allowedUserIdsList) then ... else BAD_REQUEST }
随着多个角色和许多实体的复杂性增加,此代码也在增长。所以我的问题:
拥有有组织的基于 id 的过滤器的最佳方法是什么,是否有信誉良好的库?
我们是否应该维护一个单独的表,其中包含每个 team_admin_id 的每个实体的可访问 ID?然后更新或插入的每一行都会触发该表的更新。
是否有正式或广泛接受的方法来减少每次调用中的数据库调用开销,只是为了检查是否允许 team_admin 访问特定用户?