using Easy; using Easy.Authorization.Abstractions; using Easy.DDD.Domain; using Easy.DDD.Domain.Repositories; using Microsoft.EntityFrameworkCore; using PermissionManagement.Api.DDD.Domain.Entites; namespace PermissionManagement.Api.DDD.Domain; public class PermissionManager : DomainService, IPermissionManager { protected IRepository PermissionGrantRepository { get; } protected IPermissionDefinitionManager PermissionDefinitionManager { get; } public PermissionManager(IRepository permissionGrantRepository, IPermissionDefinitionManager permissionDefinitionManager) { PermissionGrantRepository = permissionGrantRepository; PermissionDefinitionManager = permissionDefinitionManager; } public async Task SetAsync(string permissionName, string providerName, Guid providerKey, bool isGranted) { var permission = PermissionDefinitionManager.Get(permissionName); When.Is(!permission.IsEnabled, $"这个权限权限 '{permissionName}' 被禁用!"); if (isGranted) { var permissionGrant = new PermissionGrant(GuidGenerator.Create(), permission.PermissionName, providerName, providerKey); await PermissionGrantRepository.AddAsync(permissionGrant, true); } else { var permissionGrant = await PermissionGrantRepository .Where(o => o.PermissionName == permissionName) .Where(o => o.ProviderKey == providerKey) .FirstOrDefaultAsync(); if (permissionGrant == null) { return; } await PermissionGrantRepository.RemoveAsync(permissionGrant, true); } } }