سفارشی سازی ASP.NET Core Identity - قسمت دوم - سرویسهای پایه
نویسنده: وحید نصیری
تاریخ: ۱۳۹۵/۱۱/۱۱ ۱۱:۳۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.1.0",
public class ApplicationRoleStore :
RoleStore<Role, ApplicationDbContext, int, UserRole, RoleClaim>,
IApplicationRoleStore public ApplicationRoleStore( IUnitOfWork uow, IdentityErrorDescriber describer = null) : base((ApplicationDbContext)uow, describer)
protected override RoleClaim CreateRoleClaim(Role role, Claim claim)
{
return new RoleClaim
{
RoleId = role.Id,
ClaimType = claim.Type,
ClaimValue = claim.Value
};
} services.AddScoped<IUnitOfWork, ApplicationDbContext>();
services.AddScoped<IApplicationRoleStore, ApplicationRoleStore>(); services.AddScoped<RoleStore<Role, ApplicationDbContext, int, UserRole, RoleClaim>, ApplicationRoleStore>();
public class ApplicationRoleManager :
RoleManager<Role>,
IApplicationRoleManager public ApplicationRoleManager(
IApplicationRoleStore store,
IEnumerable<IRoleValidator<Role>> roleValidators,
ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors,
ILogger<ApplicationRoleManager> logger,
IHttpContextAccessor contextAccessor,
IUnitOfWork uow) :
base((RoleStore<Role, ApplicationDbContext, int, UserRole, RoleClaim>)store, roleValidators, keyNormalizer, errors, logger, contextAccessor) services.AddScoped<IApplicationRoleManager, ApplicationRoleManager>(); services.AddScoped<RoleManager<Role>, ApplicationRoleManager>();
public class ApplicationUserStore : UserStore<User, Role, ApplicationDbContext, int, UserClaim, UserRole, UserLogin, UserToken, RoleClaim>, IApplicationUserStore
public ApplicationUserStore( IUnitOfWork uow, IdentityErrorDescriber describer = null) : base((ApplicationDbContext)uow, describer)
protected override UserClaim CreateUserClaim(User user, Claim claim)
{
var userClaim = new UserClaim { UserId = user.Id };
userClaim.InitializeFromClaim(claim);
return userClaim;
}
protected override UserLogin CreateUserLogin(User user, UserLoginInfo login)
{
return new UserLogin
{
UserId = user.Id,
ProviderKey = login.ProviderKey,
LoginProvider = login.LoginProvider,
ProviderDisplayName = login.ProviderDisplayName
};
}
protected override UserRole CreateUserRole(User user, Role role)
{
return new UserRole
{
UserId = user.Id,
RoleId = role.Id
};
}
protected override UserToken CreateUserToken(User user, string loginProvider, string name, string value)
{
return new UserToken
{
UserId = user.Id,
LoginProvider = loginProvider,
Name = name,
Value = value
};
} services.AddScoped<IApplicationUserStore, ApplicationUserStore>(); services.AddScoped<UserStore<User, Role, ApplicationDbContext, int, UserClaim, UserRole, UserLogin, UserToken, RoleClaim>, ApplicationUserStore>();
public class ApplicationUserManager : UserManager<User>, IApplicationUserManager
public ApplicationUserManager(
IApplicationUserStore store,
IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<User> passwordHasher,
IEnumerable<IUserValidator<User>> userValidators,
IEnumerable<IPasswordValidator<User>> passwordValidators,
ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors,
IServiceProvider services,
ILogger<ApplicationUserManager> logger,
IHttpContextAccessor contextAccessor,
IUnitOfWork uow,
IUsedPasswordsService usedPasswordsService)
: base((UserStore<User, Role, ApplicationDbContext, int, UserClaim, UserRole, UserLogin, UserToken, RoleClaim>)store, optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger) services.AddScoped<IApplicationUserManager, ApplicationUserManager>(); services.AddScoped<UserManager<User>, ApplicationUserManager>();
public class ApplicationSignInManager :
SignInManager<User>,
IApplicationSignInManager public ApplicationSignInManager(
IApplicationUserManager userManager,
IHttpContextAccessor contextAccessor,
IUserClaimsPrincipalFactory<User> claimsFactory,
IOptions<IdentityOptions> optionsAccessor,
ILogger<ApplicationSignInManager> logger)
: base((UserManager<User>)userManager, contextAccessor, claimsFactory, optionsAccessor, logger) services.AddScoped<IApplicationSignInManager, ApplicationSignInManager>(); services.AddScoped<SignInManager<User>, ApplicationSignInManager>();
services.AddIdentity<User, Role>(identityOptions =>
{
}).AddUserStore<ApplicationUserStore>()
.AddUserManager<ApplicationUserManager>()
.AddRoleStore<ApplicationRoleStore>()
.AddRoleManager<ApplicationRoleManager>()
.AddSignInManager<ApplicationSignInManager>()
// You **cannot** use .AddEntityFrameworkStores() when you customize everything
//.AddEntityFrameworkStores<ApplicationDbContext, int>()
.AddDefaultTokenProviders(); public static void UseCustomIdentityServices(this IApplicationBuilder app)
{
app.UseIdentity();
var identityDbInitialize = app.ApplicationServices.GetService<IIdentityDbInitializer>();
identityDbInitialize.Initialize();
identityDbInitialize.SeedData();
} if (User.IsInRole(ConstantRoles.Admin))
Task<PagedUsersListViewModel> GetPagedApplicationUsersInRoleListAsync
public async Task<PagedUsersListViewModel> GetPagedApplicationUsersInRoleListAsync
does not implement interface member 'IApplicationRoleManager.GetPagedApplicationUsersInRoleListAsync
public static void InitializeDb(this IServiceProvider serviceProvider)
{
var scopeFactory = serviceProvider.GetRequiredService<IServiceScopeFactory>();
using (var scope = scopeFactory.CreateScope())
{
var identityDbInitializer = scope.ServiceProvider.GetService<IIdentityDbInitializer>();
identityDbInitializer.Initialize();
identityDbInitializer.SeedData();
}
} public class ApplicationSignInManager :
SignInManager<User>,
IApplicationSignInManager
{
// ...
public ApplicationSignInManager(
IApplicationUserManager userManager,
IHttpContextAccessor contextAccessor,
IUserClaimsPrincipalFactory<User> claimsFactory,
IOptions<IdentityOptions> optionsAccessor,
ILogger<ApplicationSignInManager> logger,
IAuthenticationSchemeProvider schemes,
IUserConfirmation<User> confirmation)
: base((UserManager<User>)userManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemes, confirmation)
{ public class ApplicationUserManager :
UserManager<User>,
IApplicationUserManager
{
// ...
public ApplicationUserManager(
IApplicationUserStore store,
IOptions<IdentityOptions> optionsAccessor,
IPasswordHasher<User> passwordHasher,
IEnumerable<IUserValidator<User>> userValidators,
IEnumerable<IPasswordValidator<User>> passwordValidators,
ILookupNormalizer keyNormalizer,
IdentityErrorDescriber errors,
IServiceProvider services,
ILogger<ApplicationUserManager> logger,
IHttpContextAccessor contextAccessor,
IUnitOfWork uow,
IUsedPasswordsService usedPasswordsService)
: base(
(UserStore<User, Role, ApplicationDbContext, int, UserClaim, UserRole, UserLogin, UserToken, RoleClaim>)store,
optionsAccessor, passwordHasher, userValidators, passwordValidators, keyNormalizer, errors, services, logger)
{ public class ConfirmEmailDataProtectorTokenProvider<TUser> : DataProtectorTokenProvider<TUser> where TUser : class
{
public ConfirmEmailDataProtectorTokenProvider(
IDataProtectionProvider dataProtectionProvider,
IOptions<ConfirmEmailDataProtectionTokenProviderOptions> options,
ILogger<DataProtectorTokenProvider<TUser>> logger)
: base(dataProtectionProvider, options, logger)
{ public class CustomSecurityStampValidator : SecurityStampValidator<User>
{
// ...
public CustomSecurityStampValidator(
IOptions<SecurityStampValidatorOptions> options,
IApplicationSignInManager signInManager,
ISystemClock clock,
ISiteStatService siteStatService,
ILoggerFactory logger)
: base(options, (SignInManager<User>)signInManager, clock, logger)
{
Task<PasswordVerificationResult> IApplicationUserManager.VerifyPasswordAsync(IUserPasswordStore<User> store, User user, string password)
{
return base.VerifyPasswordAsync(store, user, password);
} Task<PasswordVerificationResult> IApplicationUserManager.VerifyPasswordAsync(IUserPasswordStore<User> store, User user, string password)
{
return base.VerifyPasswordAsync(store, user, password);
}
public class Category : IAuditableEntity
{
public int Id { get; set; }
public Category()
{
Products = new HashSet<Product>();
}
public DateTime? CreatedDateTime { get; set; } //Here
public string Name { get; set; }
public string Title { get; set; }
public virtual ICollection<Product> Products { get; set; }
}