public virtual async Task <PermissionWithGrantedProviders> GetAsync(string permissionName, string providerName, string providerKey) { return(await GetInternalAsync(PermissionDefinitionManager.Get(permissionName), providerName, providerKey)); }
public async Task <PermissionWithGrantedProviders> GetAsync(string permissionName, string providerName, string providerKey) { return(await GetInternalAsync(PermissionDefinitionManager.Get(permissionName), providerName, providerKey).ConfigureAwait(false)); }
public virtual async Task <GetPermissionListResultDto> GetAsync(string providerName, string providerKey) { await CheckProviderPolicy(providerName); var result = new GetPermissionListResultDto { EntityDisplayName = providerKey, Groups = new List <PermissionGroupDto>() }; var multiTenancySide = CurrentTenant.GetMultiTenancySide(); foreach (var group in PermissionDefinitionManager.GetGroups()) { var groupDto = new PermissionGroupDto { Name = group.Name, DisplayName = group.DisplayName.Localize(StringLocalizerFactory), Permissions = new List <PermissionGrantInfoDto>() }; var neededCheckPermissions = new List <PermissionDefinition>(); foreach (var permission in group.GetPermissionsWithChildren() .Where(x => x.IsEnabled) .Where(x => !x.Providers.Any() || x.Providers.Contains(providerName)) .Where(x => x.MultiTenancySide.HasFlag(multiTenancySide))) { if (await SimpleStateCheckerManager.IsEnabledAsync(permission)) { neededCheckPermissions.Add(permission); } } if (!neededCheckPermissions.Any()) { continue; } var grantInfoDtos = neededCheckPermissions.Select(x => new PermissionGrantInfoDto { Name = x.Name, DisplayName = x.DisplayName.Localize(StringLocalizerFactory), ParentName = x.Parent?.Name, AllowedProviders = x.Providers, GrantedProviders = new List <ProviderInfoDto>() }).ToList(); var multipleGrantInfo = await PermissionManager.GetAsync(neededCheckPermissions.Select(x => x.Name).ToArray(), providerName, providerKey); foreach (var grantInfo in multipleGrantInfo.Result) { var grantInfoDto = grantInfoDtos.First(x => x.Name == grantInfo.Name); grantInfoDto.IsGranted = grantInfo.IsGranted; foreach (var provider in grantInfo.Providers) { grantInfoDto.GrantedProviders.Add(new ProviderInfoDto { ProviderName = provider.Name, ProviderKey = provider.Key, }); } groupDto.Permissions.Add(grantInfoDto); } if (groupDto.Permissions.Any()) { result.Groups.Add(groupDto); } } return(result); }
public virtual async Task <GetPermissionListResultDto> GetAsync(string providerName, string providerKey) { await CheckProviderPolicy(providerName); var result = new GetPermissionListResultDto { EntityDisplayName = providerKey, Groups = new List <PermissionGroupDto>() }; var multiTenancySide = CurrentTenant.GetMultiTenancySide(); foreach (var group in PermissionDefinitionManager.GetGroups()) { var groupDto = new PermissionGroupDto { Name = group.Name, DisplayName = group.DisplayName.Localize(StringLocalizerFactory), Permissions = new List <PermissionGrantInfoDto>() }; foreach (var permission in group.GetPermissionsWithChildren()) { if (!permission.IsEnabled) { continue; } if (!await PermissionStateManager.IsEnabledAsync(permission)) { continue; } if (permission.Providers.Any() && !permission.Providers.Contains(providerName)) { continue; } if (!permission.MultiTenancySide.HasFlag(multiTenancySide)) { continue; } var grantInfoDto = new PermissionGrantInfoDto { Name = permission.Name, DisplayName = permission.DisplayName.Localize(StringLocalizerFactory), ParentName = permission.Parent?.Name, AllowedProviders = permission.Providers, GrantedProviders = new List <ProviderInfoDto>() }; var grantInfo = await PermissionManager.GetAsync(permission.Name, providerName, providerKey); grantInfoDto.IsGranted = grantInfo.IsGranted; foreach (var provider in grantInfo.Providers) { grantInfoDto.GrantedProviders.Add(new ProviderInfoDto { ProviderName = provider.Name, ProviderKey = provider.Key, }); } groupDto.Permissions.Add(grantInfoDto); } if (groupDto.Permissions.Any()) { result.Groups.Add(groupDto); } } return(result); }
public async Task <MultiplePermissionGrantResult> IsGrantedAsync(ClaimsPrincipal claimsPrincipal, string[] names) { Check.NotNull(names, nameof(names)); var multiTenancySide = claimsPrincipal?.GetMultiTenancySide() ?? CurrentTenant.GetMultiTenancySide(); var result = new MultiplePermissionGrantResult(); if (!names.Any()) { return(result); } var permissionDefinitions = new List <PermissionDefinition>(); foreach (var name in names) { var permission = PermissionDefinitionManager.Get(name); result.Result.Add(name, PermissionGrantResult.Undefined); if (permission.IsEnabled && await StateCheckerManager.IsEnabledAsync(permission) && permission.MultiTenancySide.HasFlag(multiTenancySide)) { permissionDefinitions.Add(permission); } } foreach (var provider in PermissionValueProviderManager.ValueProviders) { var permissions = permissionDefinitions .Where(x => !x.Providers.Any() || x.Providers.Contains(provider.Name)) .ToList(); if (permissions.IsNullOrEmpty()) { break; } var context = new PermissionValuesCheckContext( permissions, claimsPrincipal); var multipleResult = await provider.CheckAsync(context); foreach (var grantResult in multipleResult.Result.Where(grantResult => result.Result.ContainsKey(grantResult.Key) && result.Result[grantResult.Key] == PermissionGrantResult.Undefined && grantResult.Value != PermissionGrantResult.Undefined)) { result.Result[grantResult.Key] = grantResult.Value; permissionDefinitions.RemoveAll(x => x.Name == grantResult.Key); } if (result.AllGranted || result.AllProhibited) { break; } } return(result); }