我使用 Hasura 作为 GraphQL API。我还使用 Hasura 配置了 RBAC。例如,对于
Manager
角色,我授予了对 users 表中以下列的读取操作权限:id, name, email
。我可以使用 Hasura 配置列级访问控制 - 例如,仅向与发出请求的用户属于同一组织(另一个表)并且具有管理员角色的用户显示电子邮件列的值,以及为其他人显示 NULL?我知道 Hasura 支持对行的条件访问,但是将相同的逻辑应用于特定列中值的可见性怎么样?
简而言之,您所描述的内容可以通过使用多个角色来完成。一个用户有 1 个默认角色,但可以有多个允许的角色。
您似乎希望用户能够仅根据特定条件访问所有行的某些列和其他列。如果是这种情况,您可能需要多个角色。一个很好的例子可能是一个
comments
表,用户可以在其中看到所有行的某些公共列,然后可能看到他们所创作的记录的一组单独的特权列。这可以通过多个角色来完成,但这需要多个请求。
您还可以基于
view
表创建一个 users
,该表只是 SELECT id, email FROM users
,并授予其权限,仅当行的公司匹配与用户的匹配时才允许行访问。在主表上,不要授予电子邮件列访问权限,并将视图以对象关系连接到主表。
当然,无论如何,您都需要建立关系来查找与当前用户的
X-HASURA-USER-ID
关联的公司。
您还可以创建一个数据库函数,将用户 ID 作为参数,并执行 SQL 函数中的逻辑,以仅有条件地显示电子邮件值。这可能是一个有点“讨厌”的解决方案。