Browse Source

Include localization key and resources while getting permission grants from server.

pull/13644/head
Halil İbrahim Kalkan 4 years ago
parent
commit
31b3cdc15d
  1. 4
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs
  2. 27
      framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceDictionary.cs
  3. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/PermissionGrantInfoDto.cs
  4. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/PermissionGroupDto.cs
  5. 52
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs
  6. 55
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs

4
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/AbpApplicationConfigurationAppService.cs

@ -214,9 +214,9 @@ public class AbpApplicationConfigurationAppService : ApplicationService, IAbpApp
{
var dictionary = new Dictionary<string, string>();
var localizer = _serviceProvider.GetRequiredService(
var localizer = (IStringLocalizer) _serviceProvider.GetRequiredService(
typeof(IStringLocalizer<>).MakeGenericType(resource.ResourceType)
) as IStringLocalizer;
);
foreach (var localizedString in localizer.GetAllStrings())
{

27
framework/src/Volo.Abp.Localization/Volo/Abp/Localization/LocalizationResourceDictionary.cs

@ -6,6 +6,8 @@ namespace Volo.Abp.Localization;
public class LocalizationResourceDictionary : Dictionary<Type, LocalizationResource>
{
private readonly Dictionary<string, LocalizationResource> _resourcesByNames = new();
public LocalizationResource Add<TResouce>([CanBeNull] string defaultCultureName = null)
{
return Add(typeof(TResouce), defaultCultureName);
@ -18,7 +20,12 @@ public class LocalizationResourceDictionary : Dictionary<Type, LocalizationResou
throw new AbpException("This resource is already added before: " + resourceType.AssemblyQualifiedName);
}
return this[resourceType] = new LocalizationResource(resourceType, defaultCultureName);
var resource = new LocalizationResource(resourceType, defaultCultureName);
this[resourceType] = resource;
_resourcesByNames[resource.ResourceName] = resource;
return resource;
}
public LocalizationResource Get<TResource>()
@ -33,4 +40,20 @@ public class LocalizationResourceDictionary : Dictionary<Type, LocalizationResou
return resource;
}
}
public LocalizationResource Get(string resourceName)
{
var resource = GetOrNull(resourceName);
if (resource == null)
{
throw new AbpException("Can not find a resource with given name: " + resourceName);
}
return resource;
}
public LocalizationResource GetOrNull(string resourceName)
{
return _resourcesByNames.GetOrDefault(resourceName);
}
}

4
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/PermissionGrantInfoDto.cs

@ -7,6 +7,10 @@ public class PermissionGrantInfoDto
public string Name { get; set; }
public string DisplayName { get; set; }
public string DisplayNameKey { get; set; }
public string DisplayNameResource { get; set; }
public string ParentName { get; set; }

4
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/PermissionGroupDto.cs

@ -7,6 +7,10 @@ public class PermissionGroupDto
public string Name { get; set; }
public string DisplayName { get; set; }
public string DisplayNameKey { get; set; }
public string DisplayNameResource { get; set; }
public List<PermissionGrantInfoDto> Permissions { get; set; }
}

52
modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs

@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
using Volo.Abp.SimpleStateChecking;
@ -45,12 +46,7 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
foreach (var group in await PermissionDefinitionManager.GetGroupsAsync())
{
var groupDto = new PermissionGroupDto
{
Name = group.Name,
DisplayName = group.DisplayName.Localize(StringLocalizerFactory),
Permissions = new List<PermissionGrantInfoDto>()
};
var groupDto = CreatePermissionGroupDto(group);
var neededCheckPermissions = new List<PermissionDefinition>();
@ -70,14 +66,9 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
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 grantInfoDtos = neededCheckPermissions
.Select(CreatePermissionGrantInfoDto)
.ToList();
var multipleGrantInfo = await PermissionManager.GetAsync(neededCheckPermissions.Select(x => x.Name).ToArray(), providerName, providerKey);
@ -108,6 +99,39 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
return result;
}
private PermissionGrantInfoDto CreatePermissionGrantInfoDto(PermissionDefinition permission)
{
var localizableDisplayName = permission.DisplayName as LocalizableString;
return new PermissionGrantInfoDto {
Name = permission.Name,
DisplayName = permission.DisplayName.Localize(StringLocalizerFactory),
DisplayNameKey = localizableDisplayName?.Name,
DisplayNameResource = localizableDisplayName?.ResourceType != null
? LocalizationResourceNameAttribute.GetName(localizableDisplayName.ResourceType)
: null,
ParentName = permission.Parent?.Name,
AllowedProviders = permission.Providers,
GrantedProviders = new List<ProviderInfoDto>()
};
}
private PermissionGroupDto CreatePermissionGroupDto(PermissionGroupDefinition group)
{
var localizableDisplayName = group.DisplayName as LocalizableString;
return new PermissionGroupDto
{
Name = group.Name,
DisplayName = group.DisplayName.Localize(StringLocalizerFactory),
DisplayNameKey = localizableDisplayName?.Name,
DisplayNameResource = localizableDisplayName?.ResourceType != null
? LocalizationResourceNameAttribute.GetName(localizableDisplayName.ResourceType)
: null,
Permissions = new List<PermissionGrantInfoDto>()
};
}
public virtual async Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input)
{
await CheckProviderPolicy(providerName);

55
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs

@ -1,11 +1,14 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options;
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.EventBus.Local;
using Volo.Abp.Localization;
using Volo.Abp.PermissionManagement.Web.Utils;
namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement;
@ -37,15 +40,18 @@ public class PermissionManagementModal : AbpPageModel
protected IPermissionAppService PermissionAppService { get; }
protected ILocalEventBus LocalEventBus { get; }
public AbpLocalizationOptions LocalizationOptions { get; }
public PermissionManagementModal(
IPermissionAppService permissionAppService,
ILocalEventBus localEventBus)
IPermissionAppService permissionAppService,
ILocalEventBus localEventBus,
IOptions<AbpLocalizationOptions> localizationOptions)
{
ObjectMapperContext = typeof(AbpPermissionManagementWebModule);
PermissionAppService = permissionAppService;
LocalEventBus = localEventBus;
LocalizationOptions = localizationOptions.Value;
}
public virtual async Task<IActionResult> OnGetAsync()
@ -54,6 +60,8 @@ public class PermissionManagementModal : AbpPageModel
var result = await PermissionAppService.GetAsync(ProviderName, ProviderKey);
UpdateLocalizations(result);
EntityDisplayName = !string.IsNullOrWhiteSpace(ProviderKeyDisplayName)
? ProviderKeyDisplayName
: result.EntityDisplayName;
@ -78,6 +86,49 @@ public class PermissionManagementModal : AbpPageModel
return Page();
}
private void UpdateLocalizations(GetPermissionListResultDto result)
{
foreach (var group in result.Groups)
{
group.DisplayName = Localize(
group.DisplayNameKey,
group.DisplayNameResource,
group.DisplayName
);
foreach (var permission in group.Permissions)
{
permission.DisplayName = Localize(
permission.DisplayNameKey,
permission.DisplayNameResource,
permission.DisplayName
);
}
}
}
private string Localize(string key, string resourceName, string fallbackValue)
{
if (key.IsNullOrEmpty() || resourceName.IsNullOrEmpty())
{
return fallbackValue;
}
var resource = LocalizationOptions.Resources.GetOrNull(resourceName);
if (resource == null)
{
return fallbackValue;
}
var result = new LocalizableString(resource.ResourceType, key).Localize(StringLocalizerFactory);
if (result.ResourceNotFound)
{
return fallbackValue;
}
return result.Value;
}
public virtual async Task<IActionResult> OnPostAsync()
{
ValidateModel();

Loading…
Cancel
Save