您需要超越ACL和RBAC并考虑基于属性的访问控制(ABAC – 请参阅NIST的指南
here). Gartner称这个空间为“外部化授权管理”.
使用ABAC,您可以轻松地表达任何规则,不仅考虑用户是谁,还考虑用户想要做的事情,地点,时间,原因和方式.使用属性定义授权,您可以使用XACML来实施策略. XACML是OASIS标准(就像SAML一样).
使用XACML,您可以获得一个API,您可以在其中提出问题,例如:Alice可以查看此记录吗?但在你的情况下,这还不够,因为你想从数据库中过滤掉记录.而且,正如您所描述的那样,您希望查询从一开始就是正确的,而不是来回到数据库,直到您拥有正确数量的授权记录.这是XACML变得特别有趣的地方,因为它是技术中立的.您可以将XACML应用于Java,C#和其他语言,例如Python但也将XACML应用于不同的层(表示,API和…数据库).可以以反向查询方式查询XACML以生成SQL语句,然后可以使用该语句在后端数据库中查询相关记录:
> Alice可以查看哪些记录?
> Alice可以在加利福尼亚查看记录,产生“SELECT * FROM records WHERE location =’CA’”
HTH