private static void RegisterPermissionClaimPolicyByModule(AuthorizationOptions options, string module)
        {
            var allPermissions = PermissionModules.GeneratePermissionsForModule(module);

            foreach (var permission in allPermissions)
            {
                options.AddPolicy(permission, policy => policy.RequireClaim(ApplicationClaimTypes.Permission, permission));
            }
        }
        public static async Task GeneratePermissionClaimByModule(this RoleManager <IdentityRole> roleManager, IdentityRole role, string module)
        {
            var allClaims = await roleManager.GetClaimsAsync(role);

            var allPermissions = PermissionModules.GeneratePermissionsForModule(module);

            foreach (var permission in allPermissions)
            {
                if (!allClaims.Any(a => a.Type == ApplicationClaimTypes.Permission && a.Value == permission))
                {
                    await roleManager.AddClaimAsync(role, new Claim(ApplicationClaimTypes.Permission, permission));
                }
            }
        }
        public static WebAssemblyHostBuilder AddClientServices(this WebAssemblyHostBuilder builder)
        {
            builder
            .Services
            .AddAuthorizationCore(options =>
            {
                foreach (var permissionModule in PermissionModules.GetAllPermissionsModules())
                {
                    RegisterPermissionClaimPolicyByModule(options, permissionModule);
                }
            })
            .AddBlazoredLocalStorage()
            .AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies())
            .AddMudServices(
                configuration =>
            {
                configuration.SnackbarConfiguration.PositionClass          = Defaults.Classes.Position.BottomRight;
                configuration.SnackbarConfiguration.HideTransitionDuration = 100;
                configuration.SnackbarConfiguration.ShowTransitionDuration = 100;
                configuration.SnackbarConfiguration.VisibleStateDuration   = 3000;
                configuration.SnackbarConfiguration.ShowCloseIcon          = false;
            })
            .AddScoped <EntityGBlazorStateProvider>()
            .AddScoped <AuthenticationStateProvider, EntityGBlazorStateProvider>()
            .AddManagers()
            .AddTransient <AuthenticationHeaderHandler>()
            .AddScoped(sp => sp
                       .GetRequiredService <IHttpClientFactory>()
                       .CreateClient(ClientName).EnableIntercept(sp))
            .AddHttpClient(ClientName, client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
            .AddHttpMessageHandler <AuthenticationHeaderHandler>();

            builder.Services.AddScoped(sp => new HttpClient {
                BaseAddress = new Uri(builder.HostEnvironment.BaseAddress)
            });
            builder.Services.AddAntDesign();
            builder.Services.Configure <ProSettings>(builder.Configuration.GetSection("ProSettings"));
            builder.Services.AddScoped <IChartService, ChartService>();
            builder.Services.AddScoped <IProjectService, ProjectService>();
            builder.Services.AddScoped <IUserService, UserService>();
            builder.Services.AddScoped <IAccountService, AccountService>();
            builder.Services.AddScoped <IProfileService, ProfileService>();

            builder.Services.AddHttpClientInterceptor();
            return(builder);
        }
 public static WebAssemblyHostBuilder AddClientServices(this WebAssemblyHostBuilder builder)
 {
     builder
     .Services
     .AddLocalization(options =>
     {
         options.ResourcesPath = "Resources";
     })
     .AddAuthorizationCore(options =>
     {
         foreach (var permissionModule in PermissionModules.GetAllPermissionsModules())
         {
             RegisterPermissionClaimPolicyByModule(options, permissionModule);
         }
     })
     .AddBlazoredLocalStorage()
     .AddMudServices(configuration =>
     {
         configuration.SnackbarConfiguration.PositionClass          = Defaults.Classes.Position.BottomRight;
         configuration.SnackbarConfiguration.HideTransitionDuration = 100;
         configuration.SnackbarConfiguration.ShowTransitionDuration = 100;
         configuration.SnackbarConfiguration.VisibleStateDuration   = 3000;
         configuration.SnackbarConfiguration.ShowCloseIcon          = false;
     })
     .AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies())
     .AddScoped <ClientPreferenceManager>()
     .AddScoped <BlazorHeroStateProvider>()
     .AddScoped <AuthenticationStateProvider, BlazorHeroStateProvider>()
     .AddManagers()
     .AddTransient <AuthenticationHeaderHandler>()
     .AddScoped(sp => sp
                .GetRequiredService <IHttpClientFactory>()
                .CreateClient(ClientName).EnableIntercept(sp))
     .AddHttpClient(ClientName, client =>
     {
         client.DefaultRequestHeaders.AcceptLanguage.Clear();
         client.DefaultRequestHeaders.AcceptLanguage.ParseAdd(CultureInfo.DefaultThreadCurrentCulture?.TwoLetterISOLanguageName);
         client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress);
     })
     .AddHttpMessageHandler <AuthenticationHeaderHandler>();
     builder.Services.AddHttpClientInterceptor();
     return(builder);
 }
 public static WebAssemblyHostBuilder AddClientServices(this WebAssemblyHostBuilder builder)
 {
     builder
     .Services
     .AddAuthorizationCore(options =>
     {
         foreach (var permissionModule in PermissionModules.GetAllPermissionsModules())
         {
             RegisterPermissionClaimPolicyByModule(options, permissionModule);
         }
     })
     .AddBlazoredLocalStorage()
     .AddLocalization(options =>
     {
         options.ResourcesPath = "Resources";
     })
     .AddMudServices(
         configuration =>
     {
         configuration.SnackbarConfiguration.PositionClass          = Defaults.Classes.Position.BottomRight;
         configuration.SnackbarConfiguration.HideTransitionDuration = 100;
         configuration.SnackbarConfiguration.ShowTransitionDuration = 100;
         configuration.SnackbarConfiguration.VisibleStateDuration   = 3000;
         configuration.SnackbarConfiguration.ShowCloseIcon          = false;
     })
     .AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies())
     .AddScoped <PreferenceManager>()
     .AddScoped <BlazorHeroStateProvider>()
     .AddScoped <AuthenticationStateProvider, BlazorHeroStateProvider>()
     .AddManagers()
     .AddTransient <AuthenticationHeaderHandler>()
     .AddScoped(sp => sp
                .GetRequiredService <IHttpClientFactory>()
                .CreateClient(ClientName))
     .AddHttpClient(ClientName, client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress))
     .AddTransientHttpErrorPolicy(policy => policy.WaitAndRetryAsync(3, _ => TimeSpan.FromSeconds(2)))
     .AddHttpMessageHandler <AuthenticationHeaderHandler>();
     return(builder);
 }