【问题标题】:Best Practices For Limiting Views by Role in MVC2MVC2 中按角色限制视图的最佳实践
【发布时间】: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


    【解决方案1】:

    我选择了 Authorize Attribute 方法:) the method 由 tvanfosson 描述。

    【讨论】:

    • 您是否有任何理由使用该方法而不是其他方式?
    • 我走这条路是因为 Authorize 属性已经完成了一些管道代码,我只需要扩展它。 [Authorize] 属性不依赖于任何特定的用户身份或角色管理机制。相反,它适用于 ASP.NET“用户”对象——它是可扩展的并且允许使用任何身份系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多