我正在开发具有以下相关属性的 ASP.NET MVC5 Web 应用程序:
- 使用 MVC5.1,Identity 2.0,不限于任何遗留的东西 - 可以使用最新的一切。
- 一个用户至少属于一个组织。
- 每个组织至少有一个用户是组织管理员。
- 组织管理员可以授予用户特定权限,例如成为另一个组织管理员。
- 据我了解,处理此问题的一个好方法是使用声明。
除了默认声明之外,用户通常还可以拥有以下声明:
组织:{some guid} 组织管理员:{与上述相同的 guid} 组织发布者:{再次相同的 guid}
可能有超级管理员,甚至超级用户,声称他们可以访问多个组织中的不同角色。
现在,让我们假设我是admin
登录到我的管理面板的用户,并且我想向用户授予user
我拥有 Organization-Admin 声明的组织的 Organization-Publisher 声明。
为简单起见,我有一个看起来像这样的模型对象:
public class GrantRightModel
{
public string OrganizationId { get; set; }
public string UserId { get; set; }
public string Right { get; set; }
}
出于本示例的目的,我们从admin
用户那里获得以下值:
- OrganizationId:
admin
拥有组织管理员声明的组织的 GUID。 - 用户身份:
user
- 右:组织-发布者
关于这种做事方式,有很多事情让我回避了。假设我们有一个带有 GrantRight 操作的 OrgAdmin 控制器;
控制器操作是否需要“手动”检查当前登录的用户(例如使用 ClaimsPrincipal.Current 找到)是否具有 GrantRightModel.OrganizationId 的 Organizaton-Admin 声明,或者这种事情是否有聪明的身份验证属性?
在代码中添加 Organization-Publisher: {guid} 声明的正确方法是什么
user
?我的控制器将根据需要通过依赖注入获得 UserManager。如果
user
在发生这种情况时登录到应用程序,有没有办法让他从他的下一个请求开始自动获得正确的索赔?我已经看到提到的方法会导致用户退出,以便他再次登录并使用他的新声明开始新的会话。我明白为什么会这样,但考虑到用户可能正在处理需要花费大量时间的事情,当他尝试提交他的工作时让他退出可能并不受欢迎。
网上有一些关于这方面的信息,但我的 google-fu 未能找到能告诉我如何击败这三点的那个。
任何人?
谢谢!