如何检查ApplicationUser是否有声明

时间:2018-03-22 10:49:38

标签: c# identity claims-based-identity

是否可以检查ApplicationUser是否有索赔?

我知道可以检查ApplicationUser是否处于角色

userManager.IsInRoleAsync(applicationUser,"admin");

我知道可以检查用户是否有这样的声明:

userManager.GetClaimsAsync(applicationUser)).Any(c=>c.Type == "userType" && c.Vaue == "admin");

但我想使用与ClaimsPrincipal对象类似的东西:

User.HasClaim("userType", "admin");

但我没有ClaimsPrincipal,我只有ApplicationUser。所以我也想知道如果可能的话,获取ApplicationUser的ClaimsPrincipal的方法。

2 个答案:

答案 0 :(得分:1)

您可以将以下扩展方法添加到UserManager类:

public static bool HasClaim(this UserManager userManager, string type, string value)
{
    return userManager.GetClaims(applicationUser).Any(c=>c.Type == type && c.Vaue == value);
}

现在,您可以在userManager对象上使用此方法:

var isAdmin = userManager.HasClaim("userType", "admin");

答案 1 :(得分:1)

正如@Jerodev所说,您可以使用UserManager来获取用户声明。或者,您可以使用从DbContext

派生的IdentityDbContext<ApplicationUser>
bool hasClaim = _db.UserClaims
   .Any(c => c.UserId == userId && c.ClaimValue == claimValue && c.ClaimType == claimType);

这两种技术仅适用于存储在数据库中的声明,并且不适用于您将动态添加的声明,例如UserClaimsPrincipalFactory。因此,这两种技术与User.HasClaim("userType", "admin") User ClaimsPrincipal

// ... #define DEFAULT_MPU_HZ 100 void die(const char* message) { fprintf(stderr, message); exit(1); } int main(void) { if(mpu_init(NULL)) { die("could not initialize MPU!\n"); } if(mpu_set_sensors(INV_XYZ_GYRO | INV_XYZ_ACCEL)) { die("could not turn on sensors!\n"); } if(mpu_configure_fifo(INV_XYZ_GYRO | INV_XYZ_ACCEL)) { die("could not configure FIFO buffer\n"); } if(mpu_set_sample_rate(DEFAULT_MPU_HZ)) { die("could not set sample rate\n"); } if(mpu_set_gyro_fsr(2000)) { die("could not set gyro full scale range!\n"); } if(mpu_set_accel_fsr(2)) { die("could not set accel full scale range!\n"); } if(dmp_load_motion_driver_firmware()) { die("[ERROR] dmp_load_motion_driver_firmware\n"); } // .... } 不同