是否可以检查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的方法。
答案 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");
}
// ....
}
不同