1

我们公司有一个 Web 服务,我们想发布它以供其他开发团队使用。尽管如此,我们仍希望控制谁使用它以及是否允许他调用此特定方法。

因此,我们提出了一个解决方案,为每个想要使用我们的 Web 服务的团队分配一个键,该键告诉调用者可以使用该键调用哪些方法。该键将作为参数传递给每个方法。将此密钥作为参数,我可以在每个方法的开头执行安全检查,如下所示:

private bool CanCallMethod(string methodIdentifier, string authenticationKey)
{
  //check in db
}

public object GetLocation(string authenticationKey, int param1, string param2)
{
    if (!CanCallMethod(someMethodIdentifier, authenticationKey))
        throw new UnauthorizedAccessException();
    //method body
}

public object SetLocation(string authenticationKey, DateTime param1)
{
    if (!CanCallMethod(someOtherMethodIdentifier, authenticationKey))
        throw new UnauthorizedAccessException();
    //method body
}

但我必须在每一种方法中都这样做……而且我必须在每一种新方法和每一种新的网络服务中记住它。所以问题是:
有什么方法可以设计我的类,以便在每次显式调用检查方法主体时在没有我的情况下调用任何方法时执行此检查?
好吧,我不这么认为,但总是值得一问。

4

1 回答 1

0

您可以将 AOP 与 PostSharp、Unity 或 Castle 等工具一起使用来拦截或创建动态代理。这可能会迫使您重新设计一些服务来实现接口。我只有使用 Unity 的经验,但从接口实现然后用 Aspects 连接它们可能会起作用。

也许这也有帮助:在业务逻辑中使用 AOP 风格的类似 MVC 的授权的最佳免费方式

于 2012-05-17T15:30:35.387 回答