VzIdentityBuilderExtensions.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. using Abp.Authorization;
  2. using Microsoft.AspNetCore.Identity;
  3. using VberZero.Authorization;
  4. using VberZero.Authorization.Roles;
  5. using VberZero.Authorization.Users;
  6. // ReSharper disable once CheckNamespace - This is done to add extension methods to Microsoft.Extensions.DependencyInjection namespace
  7. namespace Microsoft.Extensions.DependencyInjection;
  8. public static class VzIdentityBuilderExtensions
  9. {
  10. public static VzIdentityBuilder AddVzTenantManager<T>(this VzIdentityBuilder builder)
  11. where T : VzTenantManager
  12. {
  13. var type = typeof(T);
  14. var managerType = typeof(VzTenantManager);
  15. builder.Services.AddScoped(type, provider => provider.GetRequiredService(managerType));
  16. builder.Services.AddScoped(managerType, type);
  17. return builder;
  18. }
  19. public static VzIdentityBuilder AddVzRoleManager<T>(this VzIdentityBuilder builder)
  20. where T : VzRoleManager
  21. {
  22. var type = typeof(T);
  23. var managerType = typeof(RoleManager<>).MakeGenericType(builder.RoleType);
  24. builder.Services.AddScoped(type, services => services.GetRequiredService(managerType));
  25. builder.AddRoleManager<T>();
  26. return builder;
  27. }
  28. public static VzIdentityBuilder AddVzUserManager<T>(this VzIdentityBuilder builder)
  29. where T : VzUserManager
  30. {
  31. var type = typeof(T);
  32. var managerType = typeof(UserManager<>).MakeGenericType(builder.UserType);
  33. builder.Services.AddScoped(type, services => services.GetRequiredService(managerType));
  34. builder.AddUserManager<T>();
  35. return builder;
  36. }
  37. public static VzIdentityBuilder AddVzSignInManager<T>(this VzIdentityBuilder builder)
  38. where T : VzSignInManager
  39. {
  40. var type = typeof(T);
  41. var managerType = typeof(SignInManager<>).MakeGenericType(builder.UserType);
  42. builder.Services.AddScoped(type, services => services.GetRequiredService(managerType));
  43. builder.AddSignInManager<T>();
  44. return builder;
  45. }
  46. public static VzIdentityBuilder AddVzLogInManager<TLogInManager>(this VzIdentityBuilder builder)
  47. where TLogInManager : VzLogInManager
  48. {
  49. var type = typeof(TLogInManager);
  50. var managerType = typeof(VzLogInManager);
  51. builder.Services.AddScoped(type, provider => provider.GetService(managerType) ?? throw new InvalidOperationException());
  52. builder.Services.AddScoped(managerType, type);
  53. return builder;
  54. }
  55. public static VzIdentityBuilder AddVzUserClaimsPrincipalFactory<T>(this VzIdentityBuilder builder)
  56. where T : VzUserClaimsPrincipalFactory
  57. {
  58. var type = typeof(T);
  59. builder.Services.AddScoped(typeof(UserClaimsPrincipalFactory<,>).MakeGenericType(builder.UserType, builder.RoleType), services => services.GetRequiredService(type));
  60. builder.Services.AddScoped(typeof(VzUserClaimsPrincipalFactory));
  61. builder.Services.AddScoped(typeof(IUserClaimsPrincipalFactory<>).MakeGenericType(builder.UserType), services => services.GetRequiredService(type));
  62. builder.Services.AddScoped(type);
  63. return builder;
  64. }
  65. public static VzIdentityBuilder AddVzSecurityStampValidator<T>(this VzIdentityBuilder builder)
  66. where T : class, ISecurityStampValidator
  67. {
  68. var type = typeof(T);
  69. builder.Services.AddScoped(typeof(SecurityStampValidator<>).MakeGenericType(builder.UserType), services => services.GetRequiredService(type));
  70. builder.Services.AddScoped(typeof(VzSecurityStampValidator));
  71. builder.Services.AddScoped(typeof(ISecurityStampValidator), services => services.GetRequiredService(type));
  72. builder.Services.AddScoped(type);
  73. return builder;
  74. }
  75. public static VzIdentityBuilder AddVzPermissionChecker<T>(this VzIdentityBuilder builder)
  76. where T : class
  77. {
  78. var type = typeof(T);
  79. var checkerType = typeof(VzPermissionChecker);
  80. builder.Services.AddScoped(type);
  81. builder.Services.AddScoped(checkerType, provider => provider.GetService(type) ?? throw new InvalidOperationException());
  82. builder.Services.AddScoped(typeof(IPermissionChecker), provider => provider.GetService(type) ?? throw new InvalidOperationException());
  83. return builder;
  84. }
  85. public static VzIdentityBuilder AddVzUserStore<T>(this VzIdentityBuilder builder)
  86. where T : class
  87. {
  88. var type = typeof(T);
  89. var vzStoreType = typeof(VzUserStore);
  90. var storeType = typeof(IUserStore<>).MakeGenericType(builder.UserType);
  91. builder.Services.AddScoped(type);
  92. builder.Services.AddScoped(vzStoreType, services => services.GetRequiredService(type));
  93. builder.Services.AddScoped(storeType, services => services.GetRequiredService(type));
  94. return builder;
  95. }
  96. public static VzIdentityBuilder AddVzRoleStore<T>(this VzIdentityBuilder builder)
  97. where T : class
  98. {
  99. var type = typeof(T);
  100. var vzStoreType = typeof(VzRoleStore);//.MakeGenericType(builder.RoleType, builder.UserType);
  101. var storeType = typeof(IRoleStore<>).MakeGenericType(builder.RoleType);
  102. builder.Services.AddScoped(type);
  103. builder.Services.AddScoped(vzStoreType, services => services.GetRequiredService(type));
  104. builder.Services.AddScoped(storeType, services => services.GetRequiredService(type));
  105. return builder;
  106. }
  107. }