I need code review for using ASP.NET Identity in a new app.
Goal
Goals:
Use int instead GUID for id's.
Useintinstead of GUID for IDs.Separate identity from view layer
I need code review if I did everything right.
Yes it is working but maybe I did something that I shouldn't or maybe there is some place for improvement.
ApplicationUserpublic class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim> { public ICollection ProductCategories { get; set; } public ICollection Stores { get; set; } public ICollection Products { get; set; }
Separate identity from view layerpublic async Task<ClaimsIdentity> GenerateUserIdentityAsync( UserManager<ApplicationUser, int> manager) { var userIdentity = await manager.CreateIdentityAsync( this, DefaultAuthenticationTypes.ApplicationCookie); return userIdentity; } } public class CustomUserRole : IdentityUserRole<int> { } public class CustomUserClaim : IdentityUserClaim<int> { } public class CustomUserLogin : IdentityUserLogin<int> { } public class CustomRole : IdentityRole<int, CustomUserRole> { public CustomRole() { } public CustomRole(string name) { Name = name; } } public class CustomUserStore : UserStore<ApplicationUser, CustomRole, int, CustomUserLogin, CustomUserRole, CustomUserClaim> { public CustomUserStore(ApplicationDbContext context) : base(context) { } } public class CustomRoleStore : RoleStore<CustomRole, int, CustomUserRole> { public CustomRoleStore(ApplicationDbContext context) : base(context) { } }
DbContextI need code review if I did everything right. Yes it is working but maybe I did something that I shouldn't or maybe there is some place for improvement.
ApplicationUser
public class ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole,
CustomUserClaim>
{
public ICollection<ProductCategory> ProductCategories { get; set; }
public ICollection<Store> Stores { get; set; }
public ICollection<Product> Products { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(
UserManager<ApplicationUser, int> manager)
{
var userIdentity = await manager.CreateIdentityAsync(
this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
}
public class CustomUserRole : IdentityUserRole<int> { }
public class CustomUserClaim : IdentityUserClaim<int> { }
public class CustomUserLogin : IdentityUserLogin<int> { }
public class CustomRole : IdentityRole<int, CustomUserRole>
{
public CustomRole() { }
public CustomRole(string name) { Name = name; }
}
public class CustomUserStore : UserStore<ApplicationUser, CustomRole, int,
CustomUserLogin, CustomUserRole, CustomUserClaim>
{
public CustomUserStore(ApplicationDbContext context)
: base(context)
{
}
}
public class CustomRoleStore : RoleStore<CustomRole, int, CustomUserRole>
{
public CustomRoleStore(ApplicationDbContext context)
: base(context)
{
}
}
DbContext
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, CustomRole,
int, CustomUserLogin, CustomUserRole, CustomUserClaim>
{
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public ApplicationDbContext()
: base("DefaultConnection")
{...
View models are still in view layer.
All All above is in data layer (class library).
In the view assembly in AccountController I changed all ApplicationUser to reference ApplicationUser in data layer assembly.
And
I also added extension to get UserIDUserID as intint: