【发布时间】:2018-06-23 10:27:39
【问题描述】:
我对基于声明的身份概念不熟悉,所以如果问题不清楚,请告诉我。
我有一个派生的用户集合,它与“组织”集合有关。用户可以是相关组织的管理员。
我正在尝试构建具有 [IsAdminForThisOrg] 属性的能力,该属性将适用于以下路线:
.../api/Organizations/1/UpdateData
首先,我正在考虑“角色”与“声明”。如果您是管理员,则角色似乎更合适,句号(不考虑实际上您的管理员权限仅适用于特定组织的事实)。
然后,阅读更多内容,似乎声明非常适合我想要完成的工作。我的想法是,在登录时,我将查找用户是管理员的所有组织,然后使用这些值的 string.concat 设置声明。然后,我可以围绕此声明制定政策。
问题 1
我对此的总体方法听起来合理吗?
问题 2
添加声明通常发生在用户登录时是否正确?为什么这个官方文档https://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims 没有提到添加声明?如果您不添加声明,这有什么用?
问题 3
用户登录时添加声明的正确方法是什么?我做了一些挖掘,并在我自己的派生 UserClaimsPrincipalFactory 中覆盖了 GenerateClaimsAsync 。它似乎正在工作。但我遇到的问题是:
protected override async Task<ClaimsIdentity> GenerateClaimsAsync(TUser user)
我传入了一个用户对象,但我需要导航到相关数据。用户对组织有一个集合导航属性,但由于我相信 EF 加载的工作方式,它尚未填充。我不知道如何指定急切或显式加载,因为我没有上下文,而且这似乎已经为我完成了。 (我不知道是什么将用户对象传递给此方法。0 也许有一种完全不同的方式来填充声明,这是更可取的。关于此方法的文档似乎很少,所以也许这不是去吧。
【问题讨论】:
标签: entity-framework asp.net-identity entity-framework-core claims-based-identity asp.net-core-identity