可扩展/可重用授权模型

时间:2008-10-15 01:48:30

标签: asp.net ajax authorization script#

好的,所以我正在寻找一些架构指导,我的团队有机会用我们正在构建的新功能重新制定某些决策,我想看看SO的想法:-)当然,某些事情我们没有改变,所以解决方案必须适合这个模型。也就是说,我们有一个ASP.NET应用程序,它使用Web服务允许用户在系统上执行操作。

问题出现了,因为与许多系统一样,不同的用户需要访问不同的功能。有些角色可以访问Y按钮,而其他角色可以访问Y和B按钮,而另一些角色仍然可以访问B.大多数时候,我看到这一点,开发人员只是放入一个mish-mosh的if语句来处理UI状态。我担心的是,如果不加以控制,这将成为一个难以维护的混乱,因为除了在GUI中放置授权逻辑之外,还需要将其放入Web服务(通过ajax调用)以确保只有授权用户才能调用某些方法

所以我的问题是,如何设计一个系统来减少随机ad-hoc if语句来检查特定角色,这些角色可以在GUI / webform代码和Web服务中重复使用代码。

为了清楚起见,这是一个ASP.NET Web应用程序,使用webforms,Script#用于AJAX功能。不要让脚本#抛弃你的回答,它与asp.net ajax并没有根本的不同:​​ - )

2 个答案:

答案 0 :(得分:1)

在Code Complete(第411页)中,Steve McConnell给出了以下建议(比尔盖茨在微软广告中将其作为睡前故事)。

“在适当的情况下使用,表驱动的代码比复杂的逻辑更简单,更容易修改,更有效。”

“您可以使用表格来描述过于动态而无法在代码中表示的逻辑。”

“表驱动方法比以前的方法更为经济[面向对象设计]”

使用基于表格的方法,您可以轻松添加新的“用户”(如用户/代理的建模思想及其操作)。这是避免许多“如果”的好方法。而且我之前已经使用过像你这样的情况,它保持了代码的美观和整洁。

答案 1 :(得分:1)

从传统的群组,角色或操作级权限转移,推动“基于声明”的授权,就像WCF提供的那样。

Zermatt是Microsoft类库的代号,可帮助开发人员在服务器和客户端上构建基于声明的应用程序。 Active Directory将成为应用程序能够与您自己以及其他行业标准服务器同时进行授权的STS之一......