Как добавить заявки на основе полей из таблицы пользователей в ASP. NET Core MVC? - PullRequest
0 голосов
/ 03 августа 2020

Как добавить претензию на основе названия отдела, сохраненного в таблице пользователей в ASP. NET Core MVC? У меня несколько пользователей из разных отделов.

В зависимости от их отделов я хочу создавать заявки. Пожалуйста, объясните мне, как это сделать.

Я знаю, как создавать и редактировать пользователей или удалять заявки пользователей с помощью хранилища утверждений, но не в описанной выше проблеме.

1 Ответ

0 голосов
/ 04 августа 2020

Согласно вашему описанию, я предлагаю вам создать настраиваемую фабрику утверждений, которая наследует UserClaimsPrincipalFactory.

Затем вы можете добавить дополнительные утверждения в методе override GenerateClaimsAsyn c.

Более подробную информацию вы можете найти в следующих кодах:

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;
        }
    }
}

Startup.cs :

    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;

Результат:

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...