【发布时间】:2010-04-07 18:34:52
【问题描述】:
检查用户是否具有执行操作的正确权限的最佳方法是什么?
我想到了几种方法,其中一些我比其他人更喜欢:
1) 使用PrincipalPermission 属性,该属性简单且写的LOC 非常低。主要缺点是它需要代码发布(和测试)才能对安全性进行任何更改。
2) 使用Authorize 属性,它似乎与PrincipalPermission 属性基本相同(至少在这种情况下)。
3) 使用自定义属性(如 here 所讨论的)并从 web.config 文件中读取配置,就像经典的 ASP.NET。这样做的好处是灵活,但我不喜欢必须生成大量代码才能读取配置。
4) 使用自定义属性并从数据库中读取角色信息。与上一个选项类似,但来自数据库。我更倾向于走这条路线,因为它为用户提供了最大的灵活性,但它也需要我指定至少一个人来更改权限。在使用模拟时,这可能会变得困难/烦人,因为将来可能不存在“管理员”。
5) 使用 web.config 或 db 方法,但不是在属性级别,而是在基控制器类中创建一个基本方法,以便轻松检查角色。这会在每个单独的操作方法中产生额外的代码,除了避免 OnActionExecuted 方法(用于捕获目的)之外,实际上并没有其他好处。
6) 我错过的其他东西......
那么哪个选项是最好的?这里要记住的是,至少在我的情况下,对代码进行更改需要进行测试,这可能是一个漫长而漫长的过程。能够避免重新构建代码似乎(对我而言)是一个主要好处,尽管我认为即使在安全性更改的情况下它也能起到作用。
(顺便说一句,我看到了一个社区 wiki 按钮和一个关于主观性的警告,但我不确定是否应该检查一下。)
【问题讨论】:
标签: c# security asp.net-mvc-2