在ASP.NET身份中扩展角色/角色组

时间:2016-05-01 22:02:11

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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