2010-04-07 60 views
2

检查用户是否有正确权限来执行操作的最佳方法是什么?在MVC2中按角色限制视图的最佳实践

我在我的脑海几种方法,其中一些我喜欢比别人多:

1)使用PrincipalPermission属性,它是简单的书面LOC非常低。主要原因是它需要一个代码发布(和测试)来对安全性进行任何更改。

2)使用Authorize属性,它看起来与PrincipalPermission属性基本相同(至少在这种情况下)。

3)使用自定义属性(如讨论here)并从web.config文件中读取配置经典ASP.NET。这具有灵活性的好处,但我不喜欢在配置中需要生成的大量代码。

4)使用自定义属性并从数据库读取角色信息。与之前的选项类似,但来自数据库。我更倾向于走这条路,因为它为用户提供了最大的灵活性,但它也要求我指定至少一个人来更改权限。由于“管理员”可能在将来不存在,因此在使用模拟时可能会变得困难/烦人。

5)使用web.config或db方法,而不是在属性级别,在基础控制器类中创建基本方法,以便轻松检查角色。这会在每个单独的操作方法中生成额外的代码,除了避免使用OnActionExecuted方法(用于捕获目的)外,实际上并没有其他好处。

6)别的东西,我已经错过了......

那么哪个选项是最好的?这里要记住的是,至少在我的情况下,对代码进行更改需要进行测试,这可能是一个漫长而漫长的过程。能够避免重建代码似乎(对我而言)是一个主要的好处,尽管我认为它即使在安全性发生变化时也能达到目的。

(顺便说一句,我看到一个社区维基按钮和有关主体的警告,但我不知道我是否应该检查或者是什么。)

回答

1

我选择了授权属性的方法:) the method由tvanfosson描述。

+0

你有没有任何理由为什么你用这种方法而不是另一种方式? – Krisc 2010-04-07 19:23:20

+0

我走了这条路线,因为Authorize属性已经完成了一些管道代码,我只需要扩展它。 [授权]属性不具有对任何特定用户身份或角色管理机制的依赖关系。相反,它对ASP.NET的“用户”对象起作用 - 这是可扩展的,并允许使用任何身份系统。 – 2010-04-08 03:40:52