RBAC-如何表示对API端点后面的对象的限制?

时间:2018-10-25 15:43:21

标签: rest rbac

许多用于REST的RBAC系统用于保护API端点,例如/students/invoice/list,但是如何有效地保护具体对象,例如/students/pete/invoice/123?据我了解,该系统的工作方式如下:

GroupsUsers的集合
RolesPermissions的集合
GroupsRoles通过m:n关系连接。权限仅保护端点/students,而无其他保护。这样,我们可以将一个Role分配给许多用户(Groups),而不必一遍又一遍地创建该角色的相同实例,因为某人可以访问一个实例,而不是另一个实例。否则,权限和角色的数量将迅速爆炸,这不是一个选择,因为在我的系统中,角色是分层的,而且它们的存储已经很昂贵了。
我的想法是利用Groups之间的交集表并存储要保护的实例id的{​​{1}},因此我们必须在Roles之间创建链接和Groups代表允许查看的每个学生。也可以将其进一步扩展为包含规则到期的日期或其他有用的属性。
尽管如此,我的胆量还是告诉我这是一种不好的方法,因为这些指向资源的显式链接不适用于新学生(显然),并且每次将学生引入系统时,我们都必须更新表。

这里的问题是,有没有更好的方法来实现RBAC来保护这些端点后面的具体实例?我知道ABAC,但我想允许我的用户添加自己的网上论坛并共享数据访问权限,而我需要一个有效的数据库表示形式。

0 个答案:

没有答案