2008-10-15 50 views
2

好吧,我正在寻找一些架构指导,我的团队正在利用我们正在构建的新功能重新投入某些决策,并且希望看到什么SO认为:-)当然有些事情我们没有改变,所以解决方案必须适合这个模型。也就是说,我们有一个ASP.NET应用程序,它使用Web服务来允许用户在系统上执行操作。可扩展/可重用的授权模型

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

所以我的问题是,如何设计一个系统,以减少随机临时if语句在这里和那里检查特定角色,这可以在GUI/webform代码和web中重用服务代码。

为了清楚起见,这是一个ASP.NET web应用程序,使用webforms,而Script#用于AJAX功能。不要让脚本#让你回答,它不像asp.net ajax那样根本不同:-)

回答

1

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

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

1

代码完成(第411页)史蒂夫麦康奈尔给出了如下建议(比尔盖茨认为在微软商业中的睡前故事)。

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

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

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

使用基于表格的方法,你可以轻松地添加新的“用户”(如在用户的建模思想/代理以及它的行为)。这是避免许多“如果”的好方法。我之前用它来处理像你这样的情况,并且它保持了代码的漂亮和整洁。

+0

那么,用户和他的权限肯定是基于表.. 。但是你是否建议每个视图的配置(即哪些操作映射到哪个权限/角色)也是基于表的? – 2008-10-15 13:26:46