.NET Core中的动态用户组授权

时间:2019-03-29 20:46:13

标签: .net .net-core asp.net-core-mvc authorization

我想知道是否有人对如何动态创建用户组,如何用用户填充这些组,然后使用授权逻辑基于组所有权来限制对视图的访问提出建议,这也是在运行时决定的。很抱歉,这个问题的范围很广,但是尽管我确实在台式机上使用.NET有相当多的经验,但是在.NET Normal / Core MVC Web框架方面却经验很少。

规格概述

运行时所需的授权任务

  • 创建组
  • 将用户分配给组
  • 将访问权限限制为某些组

2 个答案:

答案 0 :(得分:1)

我认为您需要建立有关应用程序需求的更多信息。 groupdynamic可能有很多含义。

在auth的世界中,根据我的经验,组用于数据安全性甚至行级安全性。因此,这里需要更多信息。但是它是抽象的,每个应用程序都可以决定该术语在代码中的真正含义。

如果您想还原视图,我建议您使用策略,因为它们具有运行时功能,您可以将其存储在数据库中并进行常规使用。

如何分配它们?这真的取决于您的应用程序...有很多用例。

  1. 您的用户自己加入,您需要使用策略将他保存到数据库中。
  2. 您的用户是由应用程序中的其他用户创建的,您可以将其附加到策略或在UI中进行支持。
  3. 随着时间的流逝,使用获取更多访问权限...再一次,您必须决定是否自动...

下面是如何手动限制的示例:

public class ContentController : Controller
{
  private IAuthorizationService _authorizationService;
  public ContentController (IAuthorizationService authorizationService)
  {
    _authorizationService = authorizationService;
  }

  public async Task<IActionResult> Save(Article article)
  {    var allowed = await _authorizationService.AuthorizeAsync(User, "ContentsEditor"));
    if (!allowed)
      throw new SomeAuthException();

    // ok, goot to go....
    ...
  }
}

您有更多的“基础设施”实现方法,但这只是一个示例

请阅读此处以获取有关使用政策的最佳做法:https://www.jerriepelser.com/blog/creating-dynamic-authorization-policies-aspnet-core/

答案 1 :(得分:0)

您需要的是动态授权,即基于属性的访问控制()。使用ABAC,可以定义使用用户,操作和资源的属性的策略。有很多系统可以做到这一点: