Skip to content

Instantly share code, notes, and snippets.

@drovani
Last active August 29, 2015 14:01
Show Gist options
  • Save drovani/25285473d49aa5a3d3ba to your computer and use it in GitHub Desktop.
Save drovani/25285473d49aa5a3d3ba to your computer and use it in GitHub Desktop.
Using ASP.NET Identity with an Int for a primary key.
using System;
using System.Security.Claims;
using System.Web.Mvc;
using Vigil.Data;
namespace Vigil.Web.Controllers
{
public abstract class BaseController : Controller, IDisposable
{
public VigilClaimsPrincipal CurrentUser
{
get { return new VigilClaimsPrincipal((ClaimsPrincipal)this.User); }
}
protected readonly IVigilContext VigilContext = new VigilContext();
public BaseController() { }
protected override void Dispose(bool disposing)
{
if (disposing && VigilContext != null)
VigilContext.Dispose();
base.Dispose(disposing);
}
}
}
using System.Data.Entity;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Vigil.Data;
using Vigil.Data.System;
namespace Vigil.Web
{
public interface IVigilUserStore : IUserStore<VigilUser, int> { }
public class VigilUserStore : UserStore<VigilUser, VigilRole, int, VigilUserLogin, VigilUserRole, VigilUserClaim>, IVigilUserStore
{
public VigilUserStore() : base(new VigilContext()) { }
public VigilUserStore(DbContext context) : base(context) { }
}
public class VigilUserManager : UserManager<VigilUser, int>
{
public VigilUserManager() : this(new VigilUserStore(new VigilContext())) { }
public VigilUserManager(IVigilUserStore store) : base(store) { }
}
}
using System;
using System.Security.Claims;
using Vigil.Data;
using Vigil.Data.System;
namespace Vigil.Web
{
public class VigilClaimsPrincipal : ClaimsPrincipal
{
public VigilClaimsPrincipal(ClaimsPrincipal principal) : base(principal) { }
public int UserId
{
get { return Int32.Parse(this.FindFirst(ClaimTypes.Sid).Value); }
}
public VigilUser VigilUser
{
get { return (new VigilContext()).Set<VigilUser>().Find(UserId); }
}
}
}
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.Entity.Validation;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity.EntityFramework;
using Vigil.Data.System;
namespace Vigil.Data
{
public interface IVigilContext : IDisposable
{
DbChangeTracker ChangeTracker { get; }
DbContextConfiguration Configuration { get; }
Database Database { get; }
DbEntityEntry Entry(object entity);
DbEntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;
IEnumerable<DbEntityValidationResult> GetValidationErrors();
int SaveChanges();
Task<int> SaveChangesAsync();
Task<int> SaveChangesAsync(CancellationToken cancellationToken);
DbSet<TEntity> Set<TEntity>() where TEntity : class;
DbSet Set(Type entityType);
}
public class VigilContext : IdentityDbContext<VigilUser, VigilRole, int, VigilUserLogin, VigilUserRole, VigilUserClaim>, IVigilContext
{
public VigilContext()
: base("VigilDb")
{
Database.SetInitializer<VigilContext>(new VigilDbInitializer());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("vigil");
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
}
}
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
namespace Vigil.Data.System
{
public class VigilUser : IdentityUser<int, VigilUserLogin, VigilUserRole, VigilUserClaim>, IUser<int>
{
}
public class VigilRole : IdentityRole<int, VigilUserRole>, IRole<int>
{
}
public class VigilUserRole : IdentityUserRole<int>
{
}
public class VigilUserLogin : IdentityUserLogin<int>
{
}
public class VigilUserClaim : IdentityUserClaim<int>
{
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment