【问题标题】:Extending Role / Role Group in ASP.NET Identity在 ASP.NET 标识中扩展角色/角色组
【发布时间】:2016-08-26 15:06:45
【问题描述】:

我有一个 MVC 应用程序,其中使用了 ASP.NET Identity 2,我可以通过授予相应角色组权限(即授予读取权限)来正确管理实验室部分Lab1Group 给 Lab1 的学生。但是,我希望应用程序灵活,以便管理员可以创建新的实验室课程,即 Lab2,并将其添加到将在创建新实验室后创建的相应角色组,即 Lab2Group。据我所知,创建一个新的实验室角色组需要创建一个具有 CRUD 操作的新控制器,但我想在新创建的实验室课程中使用相同的控制器。可能吗?因为通常我们需要使用 [Authorize] 属性来定义对控制器的访问权限,我不确定是否可以将新创建​​的角色添加到该属性中?有什么想法吗?

【问题讨论】:

  • 你可以编写一个自定义的 Authorization 属性来实现更灵活的东西:weblogs.asp.net/jongalloway/…
  • @BrendanGreen 感谢您的回复。按照本文中的步骤,我能否通过创建新实验室来创建新的自定义角色或 ole 组?问题清楚了吗?
  • @BrendanGreen 有什么想法吗?

标签: asp.net asp.net-mvc asp.net-identity-2


【解决方案1】:

如果您想在角色授权中加入动态行为,您可以在数据库中创建路由和角色映射,如果需要,您还可以将其缓存在应用程序中。其次,您必须创建一个自定义授权属性,该属性可以获取当前路由(控制器或控制器+操作)所需的角色,并且可以从当前上下文访问当前用户角色。您拥有这两个信息,现在您可以根据您的应用程序逻辑通过覆盖新属性中的 OnAuthorization 方法来授权/取消授权用户。

让我们划分问题陈述,然后尝试解决。

  1. 您必须创建新角色/角色组,并且需要将它们分配给适当的用户,这应该是状态转发,应用管理员可以这样做。 Identity 2.0 对此有好处。

  2. 根据您的问题,Lab1 和 Lab2 的路线可能是 labcontroller/lab1 、 labcontroller/lab2。我想告诉你,如果你想让授权过程动态化,你可以在 db 中映射路由和角色。

  3. 当任何用户访问 labcontroller/lab1 时,您的自定义授权属性的 OnAuthorization 方法将从上下文中读取当前路由,并从上述映射中获取其所需的角色。
  4. 如果当前用户也具有所需角色,将授予权限。

【讨论】:

  • 感谢您的回复。按照您提到的步骤,我能否如我在问题中解释的那样为每个创建的实验室创建新角色?另一方面,我可以通过您提到的这种方法使用 Asp.NET Identity 2.0 或更高版本吗?如果有,能举个例子吗?
  • 非常感谢。我投赞成票,但我认为如果您为解决方案步骤的每个部分发布示例代码会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 2020-05-01
  • 2013-06-17
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
相关资源
最近更新 更多