Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Identity在asp.net core中调试时添加或删除当前用户的角色?_.net_Asp.net Core_Asp.net Identity_Claims Based Identity - Fatal编程技术网

使用Identity在asp.net core中调试时添加或删除当前用户的角色?

使用Identity在asp.net core中调试时添加或删除当前用户的角色?,.net,asp.net-core,asp.net-identity,claims-based-identity,.net,Asp.net Core,Asp.net Identity,Claims Based Identity,出于测试目的,我想更改当前登录用户的角色,我不知道在哪里可以这样做,也不知道如何向当前索赔集合添加和删除索赔一种方法是注册一个自定义用户,您可以在其中创建自定义主体,并根据需要更改其身份/索赔/角色 如果存在IClaimsTransformation服务,则将在成功验证请求后调用该服务 我创建了一个仅在开发环境中生效的自定义转换,如下所示: 公共类CustomClaimTransformation:IClaimsTransformation { 私有只读IHostingEnvironment环境

出于测试目的,我想更改当前登录用户的角色,我不知道在哪里可以这样做,也不知道如何向当前索赔集合添加和删除索赔

一种方法是注册一个自定义用户,您可以在其中创建自定义主体,并根据需要更改其身份/索赔/角色

如果存在
IClaimsTransformation
服务,则将在成功验证请求后调用该服务

我创建了一个仅在开发环境中生效的自定义转换,如下所示:

公共类CustomClaimTransformation:IClaimsTransformation
{
私有只读IHostingEnvironment环境;
//如果您使用的是3.0,请改用“IWebHostEnvironment”
公共客户请求传输信息(IHostingEnvironment env)
{
this.env=env;
}
公共任务TransformAsync(ClaimsPrincipal主体)
{
如果(!NeedChangeClaims(委托人))
返回任务.FromResult(主体);
var identity=主体。identity作为索赔实体;
//筛选索赔(即删除索赔)
var索赔=身份。索赔
。其中(c=>!应删除该索赔(c));
//映射新身份
identity=新的ClaimsEntity(声明,identity.AuthenticationType,identity.RoleClaimType,identity.NameClaimType);
//添加您喜欢的额外索赔
identity.AddClaim(新的ClaimTypes.StreetAddress,“NY”);
返回Task.FromResult(新的ClaimsPrincipal(标识));
}
私人bool NeedChangeClaims(ClaimsPrincipal cp)
{
if(env.IsDevelopment()){
返回true;
}
返回false;
}
private bool应删除该索赔(索赔c)
{
if(c.Type==ClaimTypes.Role&&c.Value==FIAdmin)
返回true;
if(c.Type==ClaimTypes.Role&&c.Value==HRAdmin)
返回true;
if(c.Type==ClaimTypes.OtherPhone)
返回true;
返回false;
}
}
要启用此服务,我们还需要在启动时注册它:

services.AddDefaultIdentity<IdentityUser>()
    .AddDefaultUI(UIFramework.Bootstrap4)
    .AddRoles<IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>();

services.AddSingleton<IClaimsTransformation, CustomClaimsTransformation>();
services.AddDefaultIdentity()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddRoles()
.AddEntityFrameworkStores();
services.AddSingleton();