背景 我正在构建一个所有用户都属于组织的应用程序。我只希望用户能够在他们所属的组织中创建/读取/更新/删除记录。
我正在使用风帆,但我正在寻找基于Connect / Express或独立的答案,因为sails-permissions节点模块没有维护。
问题 如何实现仅允许用户所属组织的CRUD的授权?
答案 0 :(得分:2)
我们也不依赖于sails-permissions。在我们的应用程序中,用户可以是多个组织的成员。
我们使用auth0进行所有身份验证活动,即每个请求必须包含请求头中包含的jwt。 jwt包括userId,orgId和role。
Sails策略解码jwt并将userId,orgId和role附加到req对象以用于所有后续检查。
每个模型都有orgId属性 - 我们使用的是MongoDB。 每个控制器,数据库操作等都将此经过验证的orgId添加到查询中。实际上我们有一个准备查询的小管道:我们添加orgId,在更新情况下我们过滤掉不需要的属性更新等。
此方法不需要额外的数据库调用来分离租户。
某些型号的每个RECORD具有特定的访问要求。在这里,我们在这条记录上存储allowedUser属性(一个用于读取,一个用于更新等),我们再次扩展查询,以便只返回或更新记录,或者将当前用户包含在适用的allowedUsers属性中的Xyz。
此方法也不需要额外的db调用。但是,这会利用特定于MongoDB的查询功能。
我们目前没有像上述两种方法(重新访问控制粒度)之间的类似ACL的要求。
答案 1 :(得分:0)
您需要使用middlewares
拦截每个请求通过检查请求标头和acl映射中是否存在某个标记来将它们与角色系统相结合,最后,如果该标记存在于acl映射中,请查看与此标记相关的权限。