汎用リポジトリパターンで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のようなものを使用し、それをコントローラーやアクションに適用する必要があります。リポジトリを呼び出すときには、そのユーザには承認されている必要があります –
認証を処理するための好ましい方法は、そのままにして、残りのデータに汎用リポジトリを使用することです。 私はちょうど1屋根の下でそれをすべて手に入れようとしていた。 –
@MarcusS:あなたは理論的にそうすることができる。パスワードを取得するなどのために、すべての機能を備えた独自のIUserStoreを実装する必要があります(https://github.com/aspnet/Identity/blob/rel/1.1.0/src/Microsoft.AspNetCoreのEF実装を参照してください)。 .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 /既知のプロバイダにマップすることができないDB構造を持っていない限り、それは価値があります – Tseng