ODatacontroller 发送 $expand 中提到的每个相关对象

ODatacontroller send every related object which have mentioned in $expand

使用 OData 控制器和 ODataQueryOption 以及 entity framework 允许我们提及我们需要通过 entity framework 从数据库中检索的字段。在 $select 参数中我们可以指定字段。

$select: 'Id,PersonnelNumber,FirstName,LastName,Gender,MaritalStatus,Department/Code,Department/Name',
        $expand: 'Department'

如您所见,也可以指定要检索的相关对象(在本例中为部门),在$expand参数中提到。

问题是,这个选项不是准备安全问题吗?由于它可以在客户端提供,任何人都可以向其添加另一个参数并检索没有权限查看的数据。 例如,我可以将 PayRoll 添加到 $expand 参数并检索人员的薪水。

$expand: 'PayRolls'

我们如何在 ODataQuery 选项和 OData 控制器中处理此功能?

谢谢

我觉得NonExpandableAttribute可以满足你的要求

例如,您可以将以下属性放在您不希望客户扩展的 属性 上:

public class Customer
{
    public int ID { get; set; }

    [NotNavigable]
    [NotExpandable]
    public PayRollType PayRolls{ get; set; }
}

使用convention model builder构建EdmModel后,会查询失败:

~/odata/Customers?$expand=PayRolls

有错误信息: "The query specified in the URI is not valid. The property 'PayRolls' cannot be used in the $expand query option."