针对我的基于OData的Web API,我有一个额外的身份验证层,用于检查用户是否有访问模型的适当权限。现在,当查询中使用$expand时,模型的绑定完全绕过了这些授权检查。
我想要的是,当调用(例如)/odata/Countries(2)?$expand=Locations,People,并且授权层报告当前用户没有检索People的权限时,仍然会返回响应,但只有Locations绑定到Countries。因此,无法访问的People模型不应与Countries一起返回。
我可以派生自SelectExpandQueryValidator并修改Validate函数,但这仅允许我声明扩展查询无效,而不能修改它。更重要的是,这是一个身份验证问题,不属于验证范围。此外,我需要Countries实体以便身份验证层确定是否可以访问Locations或People。
随后,我查看了System.Web.Http.OData.Query命名空间,并发现我应该以某种方式修改RawExpand属性SelectExpandQueryOption。但由于这是只读的(而且似乎真的像黑客),所以我开始寻找替代方案。只是,我找不到何时调用ODataQueryOptions类以使用ApplyTo方法(在我的情况下绑定所有扩展模型)。因此,问题就变成了:在已经调用的方法中,如何修改$expand绑定模型的方式?
由于这是一个非常具体的$expand问题,尤其是beta功能,因此我可能正在寻找徘徊在这里的ASP.NET Web API开发人员。我是否错过了一些明显的功能,还是我的需求太高了?先感谢您!
我想要的是,当调用(例如)/odata/Countries(2)?$expand=Locations,People,并且授权层报告当前用户没有检索People的权限时,仍然会返回响应,但只有Locations绑定到Countries。因此,无法访问的People模型不应与Countries一起返回。
我可以派生自SelectExpandQueryValidator并修改Validate函数,但这仅允许我声明扩展查询无效,而不能修改它。更重要的是,这是一个身份验证问题,不属于验证范围。此外,我需要Countries实体以便身份验证层确定是否可以访问Locations或People。
随后,我查看了System.Web.Http.OData.Query命名空间,并发现我应该以某种方式修改RawExpand属性SelectExpandQueryOption。但由于这是只读的(而且似乎真的像黑客),所以我开始寻找替代方案。只是,我找不到何时调用ODataQueryOptions类以使用ApplyTo方法(在我的情况下绑定所有扩展模型)。因此,问题就变成了:在已经调用的方法中,如何修改$expand绑定模型的方式?
由于这是一个非常具体的$expand问题,尤其是beta功能,因此我可能正在寻找徘徊在这里的ASP.NET Web API开发人员。我是否错过了一些明显的功能,还是我的需求太高了?先感谢您!