【问题标题】:ASP.NET MVC Role Authorization based on Site/URL基于站点/URL 的 ASP.NET MVC 角色授权
【发布时间】:2012-05-14 10:38:05
【问题描述】:

我正在创建一个 Web 应用程序,并将其部署到不同的站点(例如 red.domain.com、blue.domain.com 等)。我希望不同的角色可以访问不同的站点(例如,“red”角色可以访问 red.domain.com)。

目前我正在使用控制器范围的身份验证(例如,[Authorize(Roles = "red")])。当我将应用程序部署到站点时,我必须更改每个控制器上的角色(例如从“红色”变为“蓝色”),这看起来很荒谬。

有人对我如何简化这个有任何想法吗?也许我可以在 IIS 站点本身上创建一个自动应用正确角色的设置?

非常感谢。

【问题讨论】:

  • 那些不同的部署共享同一个数据库吗?
  • 那如果你只是使用相同的角色名称呢?
  • 哈 - 对不起。用于身份验证的相同数据库。 (数据的不同数据库。)但使用单独的身份验证数据库可能是最简单的。谢谢你。绝对是一种选择。

标签: c# asp.net .net asp.net-mvc iis


【解决方案1】:

可能是依赖注入的好地方。 StructureMap 之类的库允许您在 web.config 中定义类型映射(我假设每个站点都有一个 web.config)

所以,如果你有RedControllerBlueController,它们都实现了一个公共接口IColourfulController,它看起来像这样:

<!-- red web.config-->
 <DefaultInstance
      PluginType="IColourfulController, [assembly name]"
      PluggedType="RedController,  [assembly name]" />

<!-- blue web.config-->
 <DefaultInstance
      PluginType="IColourfulController, [assembly name]"
      PluggedType="BlueController,  [assembly name]" />

// when you need the controller
IColourfulController controller = 
    ObjectFactory.GetInstance<IColourfulController>();

两个站点可以使用相同的代码来获取控制器,但 web.config 会说明它是蓝色还是红色。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2010-10-21
    • 2013-02-13
    • 2020-10-19
    • 2014-03-19
    • 2014-10-22
    相关资源
    最近更新 更多