这两种在 OpenFGA 授权模型中定义间接关系的方法有什么区别?
type user
type team
relations
define member: [user]
type project
relations
define member: [user, team#member]
---
fga.writeTuples([
{team:'devs#member', relation:'member', object:'project:next-big-app'}
])
对
type user
type team
relations
define member: [user]
type project
relations
define team: [team]
define member: [user] or member from team
---
fga.writeTuples([
{team:'devs', relation:'team', object:'project:next-big-app'}
])
我发现第二种方法更清晰、更容易推理,但第一种方法似乎在文档中得到更多推广。两者之间有功能上的区别吗?两者之间有性能差异吗?
对于该场景,是等效的。
如果您使用第一种方法,您可以为不同的团队分配不同的关系,例如
输入用户
type team
relations
define member: [user]
type project
relations
define reader: [team#member]
define writer: [team#member]
如果您使用第二种方法,您可以轻松定义比继承团队的关系更多的关系:
type user
type team
relations
define member: [user]
define owner : [user]
type project
relations
define team: [team]
define member: [user] or member from team
define owner : owner from project
当您有层次结构时,您倾向于使用第二种方法(例如文件夹/文档),但是当您有一组想要为其分配特定关系的用户时(例如“团队”、“组”、“角色”) )首选第一种方法。