WCF 数据服务 o来自 QueryInterceptor 的数据引发异常
本文关键字:数据 异常 来自 服务 WCF QueryInterceptor | 更新日期: 2024-10-30 23:23:51
我遇到这样一种情况:允许具有特定角色的用户查看 oData 源的全部内容,而没有该角色的用户可以查看"他们的"记录。
该模型包含一个用户 ID 字段。注意:这适用于使用内置 AD 角色提供程序的内部 Intranet 站点。允许非特定角色的用户查看其用户 ID 与 UserId 字段的值匹配的任何记录。如果没有特定角色的个人尝试访问这些值不匹配的记录,我想抛出一个未授权异常。
最终,QueryInterceptor返回的表达式似乎稍后会转到SQL并用于过滤结果。这意味着抛出语句在表达式中没有真正的意义。
有没有其他方法可以做我想做的事?
我的查询拦截器之一的示例:
[QueryInterceptor("Notifications")]
public Expression<Func<Notification, bool>> OnQueryNotifications()
{
var user = HttpContext.Current.User;
var userId = user.Identity.UserId(); //Extension method
// returns boolean if the user is in any of the roles passed in the array
var allowed = SiteSecurity.Allowed(user, new string[] { "Administrator", "Technician" });
if (!allowed)
// Here is where I need to test if the user is requesting any specific
// records, and if they are allowed to view those records.
return q => q.UserId.Equals(userId, StringComparison.OrdinalIgnoreCase);
else
return q => true;
}
您可以通过仅返回他们有权访问的记录来排除记录(如上所示)。
或者,如果用户尝试获取他们无权访问的数据,则可以返回 403 禁止状态代码。