C# 如何在ASP.NET Core MVC中基于users表中的字段添加声明?

C# 如何在ASP.NET Core MVC中基于users表中的字段添加声明?,c#,asp.net-core,entity-framework-core,asp.net-core-mvc,C#,Asp.net Core,Entity Framework Core,Asp.net Core Mvc,如何根据ASP.NET Core MVC中用户表中保存的部门名称添加索赔?我有多个属于不同部门的用户 根据他们的部门,我希望创建索赔。请指导我怎么做 我知道如何使用claims store创建和编辑用户或删除用户声明,但没有上述问题。根据您的描述,我建议您可以创建一个自定义声明工厂,该工厂继承UserClaimsPrincipalFactory 然后可以在override GenerateClaimsAsync方法中添加其他声明 更多详细信息,请参考以下代码: MyUserClaimsPrinc

如何根据ASP.NET Core MVC中用户表中保存的部门名称添加索赔?我有多个属于不同部门的用户

根据他们的部门,我希望创建索赔。请指导我怎么做


我知道如何使用claims store创建和编辑用户或删除用户声明,但没有上述问题。

根据您的描述,我建议您可以创建一个自定义声明工厂,该工厂继承
UserClaimsPrincipalFactory

然后可以在override GenerateClaimsAsync方法中添加其他声明

更多详细信息,请参考以下代码:

MyUserClaimsPrincipalFactory:

using IdentityTestDemo.Data;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Options;
using System.Linq;
using System.Security.Claims;
using System.Threading.Tasks;

namespace IdentityTestDemo
{
    public class MyUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser>
    {
        private ApplicationDbContext _appliationDbContext;
        public MyUserClaimsPrincipalFactory(
        UserManager<IdentityUser> userManager,
        IOptions<IdentityOptions> optionsAccessor,ApplicationDbContext applicationDbContext)
            : base(userManager, optionsAccessor)
        {
            _appliationDbContext = applicationDbContext;
        }

        protected override async Task<ClaimsIdentity> GenerateClaimsAsync(IdentityUser user)
        {
           //get the data from dbcontext
           var Iuser=   _appliationDbContext.Users.Where(x => x.EmailConfirmed == true).FirstOrDefault();

            var identity = await base.GenerateClaimsAsync(user);
            //Get the data from EF core

            identity.AddClaim(new Claim("EmailTest", Iuser.Email));
            return identity;
        }
    }
}
结果:


通常,我们会在用户成功登录后添加索赔。您能告诉我您现在使用了哪种身份验证模式吗?Cookie、JWT或identity。如果您使用cookie身份验证,那么您可以使用EF core获取用户部门,然后创建声明并添加它。我使用的是Identity user类。我没有使用cookie身份验证。请指导如何使用itI如果你在我进行大学项目时指导我,我将非常感谢你。只需指导我如何使用用户表中保存的用户部门创建索赔并授权用户访问其各自的部门控制器。是否有更新?我的回答对你有帮助吗?是的,先生。成功了。非常感谢你。
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>().AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>(); ;
        services.AddControllersWithViews();
        services.AddRazorPages();
    }
        var result = User.FindFirst("EmailTest").Value;