Возможно ли использовать стандартную аутентификацию asp net core в шаблоне универсального репозитория, и если да, то как?Использование ApplicationUser в шаблоне общего репозитория
Я могу создать проект, который использует общий шаблон репозитория для всего моего кода, за исключением стороны аутентификации проекта, которая использует метод по умолчанию.
Мой репозиторий выглядит следующим образом:
using System.Linq;
using DemoWebsite.Interfaces;
using Microsoft.EntityFrameworkCore;
namespace DemoWebsite.Data
{
public class Repository<T> : IRepository<T> where T : class
{
protected readonly DbContext Context;
protected DbSet<T> DbSet;
public Repository(ApplicationDbContext context)
{
Context = context;
DbSet = context.Set<T>();
}
public void Add(T entity)
{
Context.Set<T>().Add(entity);
Save();
}
public T Get<TKey>(TKey id)
{
return DbSet.Find(id);
}
public IQueryable<T> GetAll()
{
return DbSet;
}
public void Update(T entity)
{
Save();
}
private void Save()
{
Context.SaveChanges();
}
}
}
Мой ApplicationDbContext класс:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customize the ASP.NET Identity model and override the defaults if needed.
// For example, you can rename the ASP.NET Identity table names and more.
// Add your customizations after calling base.OnModelCreating(builder);
}
}
Зачем смешивать обязанности? Репозиторий должен нести ответственность за получение данных. Аутентификация не несет ответственности за репозиторий. Для этого вы должны использовать что-то вроде IAuthenticationFilter и применять его к контроллерам или действиям. Когда вы вызываете репозиторий, пользователь должен быть авторизовано для этого –
. Таким образом, предпочтительный способ обработки аутентификации - оставить его как есть и просто использовать общий репозиторий для остальной части моих данных? Я просто пытался все это под одной крышей –
@MarcusS: Теоретически можно было бы так сказать. Вам нужно будет реализовать свой собственный IUserStore со всеми его функциями (для получения паролей и т. Д. См. Здесь EF. Https://github.com/aspnet/Identity/blob/rel/1.1.0/src/Microsoft.AspNetCore .Identity.EntityFrameworkCore/UserStore.cs # L161-L170), а затем зарегистрируйте его самостоятельно https://github.com/aspnet/Identity/blob/rel/1.1.0/src/Microsoft.AspNetCore.Identity.EntityFrameworkCore/IdentityEntityFrameworkBuilderExtensions. CS # L45-L51. Больше проблем, чем это стоит, если у вас нет структуры БД, которая не может быть сопоставлена с EF/известными поставщиками – Tseng