gpt4 book ai didi

c# - WCF 数据服务 - 在返回结果之前修改对象?

转载 作者:行者123 更新时间:2023-11-30 15:42:35 26 4
gpt4 key购买 nike

我正在使用 WCF 数据服务,我有一些字段/属性我想在发送回客户端之前“删除”(将值设置为空字符串或 null)。

例如:用户表有密码列,我不想将值传递给客户端。这是一个示例,应用中还有其他此类列,出于安全/隐私原因,应排除该值。

对于这样一个基本问题,我很抱歉,我是 WCF 数据服务的新手,还没有找到任何有希望的线索。我试过 QueryInterceptors 但没有成功。

有人能指出我正确的方向吗?

谢谢

最佳答案

IMO 这超出了 WCF 数据服务的范围。 WCF 数据服务旨在采用您的实体模型并根据访问规则按原样公开它。如果您的实体公开了一些属性并且该实体公开了它的属性只是公开的。适用于简单增删改查场景或只读场景。

QueryInterceptor 不会帮助你,因为它可以用于数据驱动的授权 - 这意味着 QueryInterceptor 可以添加一些额外的条件来过滤当前用户不允许的记录to see = 它将过滤掉所有记录,但不会修改过滤结果。

没有指向空字段的钩子(Hook),因为这是一种糟糕的方法。如果您不想公开某些字段,那么它们根本不应该是公开实体的一部分。您可以使用 QueryView 创建仅公开公共(public)字段的第二个只读实体。在您的 EDMX 文件中。接下来,您需要修改 DataServiceConfiguration 中的访问规则。您必须删除对初始 User 实体集的访问规则,并向该新实体集添加读取访问规则。

如果您需要控制每个用户的访问规则,您必须使用某种 authentication在您的服务中,您必须在 InitializeService 方法中处理它(除非 DataServiceConfiguration 在别处可用)。像这样的东西:

public static void InitializeService(DataServiceConfiguration config)
{
var context = ServiceSecurityContext.Current;
if (context != null && context.PrimaryIdentity != null)
{
var userName = context.PrimaryIdentity.Name;
if (SomeMethodToValidateUserPermissions(userName)
{
config.SetEntitySetAccessRule("Users", EntitySetRights.AllRead);
}
}

config.SetEntitySetAccessRule("TrimmedUsers", EntitySetRights.AllRead);
}

通过更深入地了解 WCF,可以使用其他方法来限制对某些资源的访问,但这是最简单的方法。

关于c# - WCF 数据服务 - 在返回结果之前修改对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7377119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com