我正在使用 ado.net 数据服务,并希望在查询拦截器中实现行级安全性,以将数据限制为仅返回允许用户查看的数据。复杂性在于用户的用户名在另一个表上。所以我想我可以根据该用户的 OnlineSubscription 表中的条目检索用户可以看到的事件列表,然后返回当前事件是否与返回的任何条目匹配,如下所示:
[QueryInterceptor("Events")]
public Expression<Func<Events, bool>> QueryEvents()
{
var allowedEventList = (from os in context.OnlineSubscription
from e in os.Events
where os.UserName == HttpContext.Current.User.Identity.Name
select e;
return e => events.Intersect(new List<Events>
{
e
}).Any();
}
但是,这会引发“未实现”异常。所以我的问题是:是否有正确的方法将当前实体与查询拦截器中的实体列表进行比较?
编辑:我也试过:
return e => events.Any(evnt => evnt.Event_Key == e.Event_Key);
没有任何成功(再次获得“未实施”异常)。