using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.DependencyInjection; using Hua.Todo.Application.CloudSync.Auth; using Hua.Todo.Application.CloudSync.Services; using Hua.Todo.Core.Entities; namespace Hua.Todo.Application.CloudSync; /// /// 云同步服务端能力的依赖注入扩展。 /// public static class CloudSyncServiceCollectionExtensions { /// /// 注册云同步相关的认证、授权与业务服务。 /// /// 服务集合。 /// 服务集合。 public static IServiceCollection AddCloudSyncServer(this IServiceCollection services) { services.AddHttpContextAccessor(); services.AddSingleton(); services.AddScoped, PasswordHasher>(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddAuthentication(SessionAuthenticationDefaults.Scheme) .AddScheme(SessionAuthenticationDefaults.Scheme, _ => { }); services.AddAuthorization(options => { options.AddPolicy("tasks:read", p => p.RequireClaim(CloudClaims.Permission, CloudPermissions.TasksRead)); options.AddPolicy("tasks:write", p => p.RequireClaim(CloudClaims.Permission, CloudPermissions.TasksWrite)); options.AddPolicy("sync:write", p => p.RequireClaim(CloudClaims.Permission, CloudPermissions.SyncWrite)); options.AddPolicy("policy:read", p => p.RequireClaim(CloudClaims.Permission, CloudPermissions.PolicyRead)); options.AddPolicy("policy:write", p => p.RequireClaim(CloudClaims.Permission, CloudPermissions.PolicyWrite)); options.AddPolicy("users:manage", p => p.RequireClaim(CloudClaims.Permission, CloudPermissions.UsersManage)); }); return services; } }