gpt4 book ai didi

c# - 在 ASP.NET MVC5 Web 应用程序中向用户帐户添加声明的正确方法

转载 作者:太空狗 更新时间:2023-10-30 01:36:09 24 4
gpt4 key购买 nike

我正在开发具有以下相关属性的 ASP.NET MVC5 网络应用程序:

  • 使用 MVC5.1、Identity 2.0,不限于任何遗留内容 - 可以使用最新的所有内容。
  • 一位用户至少属于一个组织。
  • 每个组织至少有一名用户是组织管理员。
  • 组织管理员可以授予用户特定权限,例如成为另一个组织管理员。
  • 据我所知,处理此问题的一个好方法是使用声明。

除了默认声明之外,用户通常还可以拥有以下声明:

组织:{some guid}组织管理员:{与上面相同的 guid}Organization-Publisher:{同样的 guid again}

可能会有 super 管理员,甚至是 super 用户,他们声称可以访问多个组织中的不同角色。

现在,假设我是用户 admin 登录到我的管理面板,我想授予用户 user 我拥有的组织的 Organization-Publisher 声明Organization-Admin 声明。

为简单起见,我有一个看起来像这样的模型对象:

public class GrantRightModel
{
public string OrganizationId { get; set; }
public string UserId { get; set; }
public string Right { get; set; }
}

为了这个例子的目的,我们从我们的 admin 用户那里得到以下值:

  • OrganizationId:admin 拥有 Organization-Admin 声明的组织的 GUID。
  • 用户ID:用户
  • 右:组织发布者

关于这种做事方式,有很多事情让我回避。假设我们有一个带有 GrantRight 操作的 OrgAdmin Controller ;

  • Controller 操作是否需要检查当前登录的用户(使用例如 ClaimsPrincipal.Current 找到)是否“手动”拥有 GrantRightModel.OrganizationId 的 Organizaton-Admin 声明,或者是否有聪明的身份验证属性什么样的东西?

  • 在代码中将 Organization-Publisher: {guid} 声明添加到 user 的正确方法是什么?我的 Controller 将根据需要通过依赖注入(inject)获取 UserManager。

  • 如果 user 在发生这种情况时登录到应用程序,是否有办法让他从下一个请求开始自动获得正确的声明?我已经看到提到的执行此操作的方法会导致用户注销,以便他再次登录并使用他的新声明开始新的 session 。我明白为什么会这样,但考虑到用户可能正在处理需要花费大量时间的事情,当他尝试提交他的工作时让他注销可能不受欢迎。

网上有一些这方面的信息,但我的 google-fu 没能找到告诉我如何击败这三点的信息。

有人吗?

谢谢!

最佳答案

关于您的问题。

Will the controller action need to check that the currently logged in user (found using for instance ClaimsPrincipal.Current) has the Organizaton-Admin claim for GrantRightModel.OrganizationId "manually", or are there clever auth attributes for this kind of thing?

没有。 Authorize 属性采用在授权时检查的可选角色列表。如果其中一个角色声明指向该角色,则使用授权,不涉及自定义代码。

What is the correct way in code to add the Organization-Publisher: {guid} claim to user? My controller will get a UserManager as necessary by dependency injection.

您使用适当的声明创建 ClaimsIdentity,然后要求授权管理器使用该身份登录。然后,身份通常会与声明一起保存在 cookie 中。

If user is signed in to the application when this happens, is there a way to have him automatically have the correct claim starting with his next request? I've seen mentioned ways to do this that would cause the user to be logged out, so that he would log in again and start a fresh session with his new claims. I see why that is the way it is, but given that the user could be working on something that takes a lot of time, it might not be popular to just have him logged out when he tries to submit his work.

我读了两遍,不太明白。当您发出 cookie 时,cookie 负责保留经过身份验证的 session 。然后根据 cookie 在每个请求管道中尽早重建声明。然后用户可以发出许多请求,只要 cookie 未失效或存储在 cookie 中的授权 token 未过期,他仍然“登录”。

关于c# - 在 ASP.NET MVC5 Web 应用程序中向用户帐户添加声明的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com