我有点挣扎,什么可能是一个简单的问题或我误解的东西…但无论如何,首先使用Linq实体代码,我试图保持我的一些表从客户端不可访问,没有成功。
使用Breeze,我已经创建了一个数据上下文,它只包含我想要公开的数据库集,很好。但是当我使用.expand()编写查询时。例如,假设我有一个posts表,我想公开它,还有一个Owner表,我想隐藏它。使用如下查询:
var query = EntityQuery
.from('Posts')
.expand('Owner');
我仍然可以看到Owner的所有列。
所以问题是:在Linq,我应该如何保护/隐藏表,和/或特定的列,我想隐藏?
经过一番挖掘,我只发现了[JsonIgnore]属性,这对我来说似乎不够。
最好的方法是什么?我觉得我可能错过了一些重要的东西,但这是一天的结束。
谢谢
如果你正在使用Breeze的WebApi实现,那么Breeze也支持ODataQueryOptions(见这里和这里)。
这允许你标记你的控制器方法,以限制如何解释查询。例如,只允许过滤您的"帖子"查询,从而排除"扩展"或"选择"的能力,从任何"帖子"请求的"所有者",你可以这样做:
[Queryable(AllowedQueryOptions=AllowedQueryOptions.Filter| AllowedQueryOptions.Top | AllowQueryOptions.Skip)]
public IQueryable<Posts> Posts() {
....
}
显然我的问题已经在这里解决了:使用OData和IQueryable风险
我刚找到它。