我正在开发一个具有以下相关属性的ASP.NET MVC5 Web应用程序:
除了默认声明之外,用户通常还可以拥有以下声明:
组织:{some guid} 组织管理员:{与上述相同的指导} 组织发布者:{再次引导}}
可能有超级管理员,甚至是超级用户,声称他们可以访问多个组织中的不同角色。
现在,让我们想象一下,我是用户admin
登录到我的管理面板,我想为用户user
授予组织管理员对组织管理员声明的组织发布者声明
为简单起见,我有一个看起来像这样的模型对象:
public class GrantRightModel
{
public string OrganizationId { get; set; }
public string UserId { get; set; }
public string Right { get; set; }
}
并且出于本示例的目的,我们从admin
用户获取以下值:
admin
具有组织管理员声明的组织的GUID。user
有许多事情让我想起了这种做事方式。假设我们有一个带有GrantRight操作的OrgAdmin控制器;
控制器操作是否需要检查当前登录的用户(使用例如ClaimsPrincipal.Current找到)是否具有GrantRightModel.OrganizationId"手动"的Organizaton-Admin声明,或者是否存在这种事情的聪明的auth属性?
在代码中添加Organization-Publisher:{guid}声明到user
的正确方法是什么?我的控制器将根据需要通过依赖注入获得UserManager。
如果user
在发生这种情况时已登录到应用程序,是否有办法让他在下次请求时自动获得正确的声明?我已经看到提到了这样做的方法,这会导致用户退出,这样他就可以再次登录并开始与他的新声明进行新的会话。我知道为什么会这样,但鉴于用户可能正在处理需要花费大量时间的事情,因此当他试图提交他的作品时,让他退出可能并不常见。
网上有一些关于此的信息,但是我的google-fu让我失去了找到如何击败这三点的那个。
任何?
谢谢!
答案 0 :(得分:3)
注意你的问题。
控制器操作是否需要检查当前登录的用户(使用例如ClaimsPrincipal.Current找到)是否具有GrantRightModel.OrganizationId"手动"的Organizaton-Admin声明,或者是否有聪明的身份验证属性对于这种事情?
没有。 Authorize
属性采用授权时检查的可选角色列表。如果其中一个角色声明指向该角色,则使用授权而不涉及自定义代码。
在代码中添加Organization-Publisher:{guid}声明给用户的正确方法是什么?我的控制器将根据需要通过依赖注入获得UserManager。
您使用适当的声明创建ClaimsIdentity
,然后要求授权经理使用该身份登录。然后,身份通常会与声明一起保存在Cookie中。
如果用户在发生这种情况时登录了该应用程序,是否有办法让他从下一个请求开始自动获得正确的声明?我已经看到提到了这样做的方法,这会导致用户退出,这样他就可以再次登录并开始与他的新声明进行新的会话。我知道为什么会这样,但鉴于用户可能正在处理需要花费大量时间的事情,因此当他试图提交他的作品时,让他退出可能并不常见。
我已经阅读了两次并且没有完全理解它。当您发出cookie时,cookie负责保留经过身份验证的会话。然后,基于cookie,在每个请求管道中尽早重建声明。然后,用户可以发出许多请求,并且他仍然会登录"只要cookie未失效或存储在cookie中的身份验证令牌过期。