我对基于声明的身份概念感到陌生,所以如果问题不清楚,请告诉我。
我有一个派生用户集合,它与一个"组织"采集。用户可以是相关组织的管理员。
我试图构建具有[IsAdminForThisOrg]属性的能力,该属性适用于以下路线:
.../api/Organizations/1/UpdateData
首先,我正在思考"角色" vs"声称"。如果您是管理员,完全停止(不考虑事实上,您的管理员权力仅适用于特定组织),似乎角色会更合适。
然后,阅读更多,似乎声称非常适合我想要完成的事情。我的想法是,在登录时,我会查找用户是管理员的所有组织,然后使用这些值的string.concat设置声明。然后,我可以围绕这个主张制定政策。
我的整体方法听起来合理吗?
添加声明通常在用户登录时发生是否正确?为什么这个官方文档https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims没有提及添加声明?如果您不添加声明,这有什么用?
用户登录时添加声明的正确方法是什么?我做了一些挖掘,并且在我自己派生的UserClaimsPrincipalFactory中覆盖了GenerateClaimsAsync。它似乎有效。但我遇到的问题是:
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(TUser user)
我在用户对象中传递,但我需要导航到相关数据。用户具有组织的集合导航属性,但由于我认为EF加载的方式,它尚未填充。我不知道如何指定热切或明确的加载,因为我没有上下文,看来这已经为我做了。 (我不知道是什么将用户对象传递给了这个方法。也许有一种完全不同的方式来填充声明,这是最好的。这个方法的文档似乎很少,所以也许这不是要走的路。
答案 0 :(得分:0)
您可能已经在某种程度上想到了这一点,但是我的想法是:您可以将dbcontext作为构造函数参数(依赖注入)用于您自己的UserClaimsPrincipalFactory,然后根据您获得的用户查询所需的组织。