【问题标题】:What's the most elegant way to verify access rights on a method (C#.Net)验证方法访问权限的最优雅方法是什么(C#.Net)
【发布时间】:2012-06-01 18:13:16
【问题描述】:

我有一个内置于 WCF (C#.Net) 中的 WebService,其中包含许多方法。在每种方法上,我都不想验证当前用户是否有权访问此特定操作。

现在,我有这样的事情:

    public MyContract MyMethod(int MyParameter)
    {
        ValidateAccess(MyCurrentIdentityInfo, ActionEnum);

        // Do stuff here...
    }
    public void MyMethod2(int MyParameter)
    {
        ValidateAccess(MyCurrentIdentityInfo, ActionEnum);

        // Do stuff here...
    }
    etc...

您会注意到我在开始时调用了一个方法来检查访问权限,然后执行我需要的代码。这段代码可以正常工作,但我必须在我的服务中的每个方法上调用这个方法,我觉得它不漂亮。

有没有更优雅的方式来实现我想要做的事情?我尝试使用自定义属性,但没有成功。

请注意,我不会尝试在 WebService 本身上验证用户身份。在上面的示例中,用户在 WebService 上是有效的。但是我想运行一个自定义代码来检查他是否可以调用一个删除记录的方法。

【问题讨论】:

  • Mvc 有安全的动作过滤器,你可以看看它们是如何实现的。

标签: c# web-services security


【解决方案1】:

您可以考虑使用Castle Dynamic Proxy 将操作的验证注入到已登录的用户上。

【讨论】:

  • 有趣的文章虽然我不知道我怎么能在“拦截”方法中必须验证什么样的动作。例如,在上面的示例中,我无法访问“ActionEnum”。
  • @PiercingDegree 你能更好地解释一下吗?通过代理,您可以完全按照服务类执行的操作。
猜你喜欢
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 2019-06-27
  • 2010-09-16
相关资源
最近更新 更多