Linq安全 - 隐藏列

时间:2013-06-04 15:09:30

标签: linq security breeze

我正在努力解决可能是一件简单的事情或我误解的事情......但无论如何,首先使用Linq实体代码,我试图让我的一些表无法从客户端访问,但没有成功。

使用Breeze,我创建了一个datacontext,只保存我想要暴露的dbsets,很好。 但是当我使用.expand()编写查询时。例如,假设我有一个我要公开的帖子表,以及一个我想要隐藏的所有者表。 使用如下查询:

var query = EntityQuery
            .from('Posts')
            .expand('Owner');

我仍然可以看到所有者的所有列。

所以问题是:在Linq中,我应该如何保护/保护/隐藏我想隐藏的表格和/或特定列?

经过一番挖掘,我发现的只是[JsonIgnore]属性,这对我来说似乎不够。

最好的方法是什么?我觉得我错过了一些可能很大的东西,但这是一天结束的时候......

由于

2 个答案:

答案 0 :(得分:1)

如果您使用的是Breeze的WebApi实现,那么Breeze也支持ODataQueryOptions(see herehere)。

这允许您标记控制器方法,以限制查询的解释方式。例如,要仅允许过滤“帖子”查询,从而排除从“帖子”请求中“展开”或“选择”“所有者”的功能,您可以执行以下操作。

[Queryable(AllowedQueryOptions=AllowedQueryOptions.Filter| AllowedQueryOptions.Top | AllowQueryOptions.Skip)]
public IQueryable<Posts> Posts() {
  ....

}

答案 1 :(得分:0)

好吧显然我的问题已经解决了: Risks of using OData and IQueryable

我刚发现它。