假设我有ActionResult Members
一个控制器,它应该只允许成员访问它。通常我只会[Authorize(Roles = "Members")]
在操作上添加一个属性,只允许Members
角色中经过身份验证的用户访问它。
有没有一种方法可以让管理员(或其他)在未来更改它以让我们说[Authorize(Roles = "Members, PotentialMembers ")]
(这将允许角色中的用户Members
并PotentialMembers
访问此操作?
谢谢
假设我有ActionResult Members
一个控制器,它应该只允许成员访问它。通常我只会[Authorize(Roles = "Members")]
在操作上添加一个属性,只允许Members
角色中经过身份验证的用户访问它。
有没有一种方法可以让管理员(或其他)在未来更改它以让我们说[Authorize(Roles = "Members, PotentialMembers ")]
(这将允许角色中的用户Members
并PotentialMembers
访问此操作?
谢谢
不,您不能使用 AuthorizeAttribute 执行此操作。您传递给它的角色被硬编译到应用程序中。
不过,还有其他方法可以解决这个问题。您可以编写自己的授权过滤器。或者您可以创建一个覆盖 OnAuthorization 或类似的基类。
不幸的是,您不能使用默认属性执行此操作。但是,您可以通过从 Authorize 继承来编写自己的属性(或者您可以很容易地在 Web 上获取 Authorize 的源代码)。
从那里开始,您必须设计一种机制来 a) 通过某种接口存储每个控制器允许的角色,以及 b) 在自定义过滤器属性中使用这些映射来允许/拒绝访问。
如果您要这样做,我建议在应用程序启动时加载映射并使用内存管理器来发出配置更改的信号。