我在基於API的解決方案中做了類似的事情,但是我在創建用戶時設置了角色聲明,而不是在變壓器中。
看過User.IsInRole()
documentation之後,看起來這種方法設計爲首先從緩存中取出。
IsInRole首先檢查IsRoleListCached屬性,以確定 角色名稱的當前用戶緩存列表是否可用。 如果IsRoleListCached屬性爲true,則爲指定角色檢查緩存列表 。如果IsInRole方法在高速緩存列表中找到指定的 角色,則它將返回true。如果IsInRole找不到 指定的角色,則它會調用默認的 提供程序實例的GetRolesForUser方法,以確定用戶名是否與來自數據源的角色關聯的 與配置的ApplicationName 值關聯。
我懷疑由於ClaimTypes.Role
是一種常見的權利要求,而不是自定義域特定的權利要求(我相信是用例用於ClaimsTransformer),應用程序使用默認情況下,高速緩存的,預變換值。
儘管如此,其中大部分是猜測。您可以在創建用戶時嘗試設置聲明。我使用UserManager類來完成它。
var claimsResult = await _userManager.AddClaimAsync(applicationUser, new Claim(ClaimsIdentity.DefaultRoleClaimType, "Administrator"));
做你嘗試加入的要求是完全一樣的?也就是說,我不會認爲這是不區分大小寫 –
是。我在調試時看到用戶聲明中的角色。 –
你有沒有試過.HasClaim看看它有什麼不同?你確定在轉型後檢查索賠嗎? –