【问题标题】:Configuring security in ASP.NET MVC at runtime在运行时在 ASP.NET MVC 中配置安全性
【发布时间】:2011-01-29 22:52:29
【问题描述】:

是否可以在运行时配置 ASP.NET MVC 中的安全性?例如,如果我有一个控制器被标记为

[Authorize(Roles="Admin")]

有没有办法在运行时添加/删除角色?或者,你必须在代码中更改它并重新编译吗?

【问题讨论】:

    标签: asp.net-mvc security configuration permissions


    【解决方案1】:

    是的,您必须提供自己的 IPrincipal 实现,以实现这一点。 Authorize 方法所做的只是调用 User.IsInRole("Admin") 方法。

    【讨论】:

      【解决方案2】:

      如果您想构建自定义的东西,您可以创建自己的自定义授权方案。

      看看 AuthorizeAttribute - 这里是an article,它对两种机制进行了简单的比较。

      【讨论】:

        【解决方案3】:

        我想您需要这种功能,因为您正在运行时添加新角色,并且您正试图将它们连接到您的应用程序提供的功能。如果我的想法是正确的,您还必须在某处(在数据库或注册表或配置文件中)存储功能列表。鉴于这一切,我相信您将用户置于角色中并将角色附加到功能上,然后将这些关系存储在数据存储中。

        因此,考虑到所有这些,您可能希望为您的操作提供一个自定义属性(装饰器),它会说类似

        [AuthorizeUsers]
        

        而不是

        [Authorize(Roles="Admin")] 
        

        所以发出对任何类型角色的任何引用,而是进入数据存储并枚举所有关系并检查所有角色/用户及其,我应该说,权限。然后您要么拒绝他们的请求(例如,将他们返回到他们有权访问的另一个视图),要么给他们一个选择权限的选项(就像 SharePoint 在您访问您无权访问的部分页面时所做的那样)。

        有关如何创作自定义授权的确切代码示例,请转到 ASP.NET MVC 源代码 - System.Web.Mvc 命名空间。

        HTH

        【讨论】:

          猜你喜欢
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-06-07
          相关资源
          最近更新 更多