2016-04-22 64 views
6

我的角色administrators添加到用戶聲明身份驗證後,用IClaimsTransformer impelimentation這樣的:的User.IsInRole(「管理員」)與IClaimsTransformer總是假

(principal.Identity as ClaimsIdentity).AddClaim(new Claim(ClaimTypes.Role, "Administrators")); 但是,當我在剃刀稱之爲User.IsInRole("Administrators")查看它的回報假。

+0

做你嘗試加入的要求是完全一樣的?也就是說,我不會認爲這是不區分大小寫 –

+0

是。我在調試時看到用戶聲明中的角色。 –

+0

你有沒有試過.HasClaim看看它有什麼不同?你確定在轉型後檢查索賠嗎? –

回答

1

我在基於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"));