Browse Source

Moved permission management api to user/role.

pull/216/head
Halil İbrahim Kalkan 9 years ago
parent
commit
82395d9253
  1. 1
      src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
  2. 2
      src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/AbpIdentityApplicationContractsModule.cs
  3. 5
      src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs
  4. 5
      src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs
  5. 1
      src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj
  6. 3
      src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModule.cs
  7. 19
      src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs
  8. 19
      src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
  9. 51
      src/Volo.Abp.Identity.Web/Permissions/IdentityPermissionAppServiceGateway.cs
  10. 2
      src/Volo.Abp.Identity.Web/wwwroot/modules/identity/views/roles/index.js
  11. 6
      src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsApplicationContractsModule.cs
  12. 13
      src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IdentityPermissions.cs
  13. 15
      src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionsPermissionDefinitionProvider.cs
  14. 3
      src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/IPermissionAppServiceHelper.cs
  15. 9
      src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppServiceHelper.cs
  16. 12
      src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/IPermissionAppServiceHelper.cs
  17. 18
      src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/NotImplementedPermissionAppServiceGateway.cs
  18. 1
      src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml
  19. 12
      src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml.cs

1
src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj

@ -17,6 +17,7 @@
<ProjectReference Include="..\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" /> <ProjectReference Include="..\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" />
<ProjectReference Include="..\Volo.Abp.Ddd\Volo.Abp.Ddd.csproj" /> <ProjectReference Include="..\Volo.Abp.Ddd\Volo.Abp.Ddd.csproj" />
<ProjectReference Include="..\Volo.Abp.Identity.Domain.Shared\Volo.Abp.Identity.Domain.Shared.csproj" /> <ProjectReference Include="..\Volo.Abp.Identity.Domain.Shared\Volo.Abp.Identity.Domain.Shared.csproj" />
<ProjectReference Include="..\Volo.Abp.Permissions.Application.Contracts\Volo.Abp.Permissions.Application.Contracts.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

2
src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/AbpIdentityApplicationContractsModule.cs

@ -2,12 +2,14 @@
using Volo.Abp.Authorization; using Volo.Abp.Authorization;
using Volo.Abp.Authorization.Permissions; using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
{ {
[DependsOn(typeof(AbpIdentityDomainSharedModule))] [DependsOn(typeof(AbpIdentityDomainSharedModule))]
[DependsOn(typeof(AbpAuthorizationModule))] [DependsOn(typeof(AbpAuthorizationModule))]
[DependsOn(typeof(AbpDddModule))] [DependsOn(typeof(AbpDddModule))]
[DependsOn(typeof(AbpPermissionsApplicationContractsModule))]
public class AbpIdentityApplicationContractsModule : AbpModule public class AbpIdentityApplicationContractsModule : AbpModule
{ {
public override void ConfigureServices(IServiceCollection services) public override void ConfigureServices(IServiceCollection services)

5
src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs

@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
{ {
@ -9,5 +10,9 @@ namespace Volo.Abp.Identity
{ {
//TODO: remove after a better design //TODO: remove after a better design
Task<List<IdentityRoleDto>> GetAllListAsync(); Task<List<IdentityRoleDto>> GetAllListAsync();
Task<GetPermissionListResultDto> GetPermissionsAsync(Guid id);
Task UpdatePermissionsAsync(Guid id, UpdatePermissionsDto input);
} }
} }

5
src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs

@ -2,6 +2,7 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
{ {
@ -10,5 +11,9 @@ namespace Volo.Abp.Identity
Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id); Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id);
Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input); Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input);
Task<GetPermissionListResultDto> GetPermissionsAsync(Guid id);
Task UpdatePermissionsAsync(Guid id, UpdatePermissionsDto input);
} }
} }

1
src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj

@ -17,6 +17,7 @@
<ProjectReference Include="..\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" /> <ProjectReference Include="..\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" />
<ProjectReference Include="..\Volo.Abp.Identity.Application.Contracts\Volo.Abp.Identity.Application.Contracts.csproj" /> <ProjectReference Include="..\Volo.Abp.Identity.Application.Contracts\Volo.Abp.Identity.Application.Contracts.csproj" />
<ProjectReference Include="..\Volo.Abp.Identity.Domain\Volo.Abp.Identity.Domain.csproj" /> <ProjectReference Include="..\Volo.Abp.Identity.Domain\Volo.Abp.Identity.Domain.csproj" />
<ProjectReference Include="..\Volo.Abp.Permissions.Application\Volo.Abp.Permissions.Application.csproj" />
<ProjectReference Include="..\Volo.Abp.Session\Volo.Abp.Session.csproj" /> <ProjectReference Include="..\Volo.Abp.Session\Volo.Abp.Session.csproj" />
</ItemGroup> </ItemGroup>

3
src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModule.cs

@ -10,7 +10,8 @@ namespace Volo.Abp.Identity
typeof(AbpIdentityDomainModule), typeof(AbpIdentityDomainModule),
typeof(AbpIdentityApplicationContractsModule), typeof(AbpIdentityApplicationContractsModule),
typeof(AbpAutoMapperModule), typeof(AbpAutoMapperModule),
typeof(AbpSessionModule) typeof(AbpSessionModule),
typeof(AbpPermissionsApplicationModule)
)] )]
public class AbpIdentityApplicationModule : AbpModule public class AbpIdentityApplicationModule : AbpModule
{ {

19
src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs

@ -4,6 +4,8 @@ using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
{ {
@ -12,13 +14,16 @@ namespace Volo.Abp.Identity
{ {
private readonly IdentityRoleManager _roleManager; private readonly IdentityRoleManager _roleManager;
private readonly IIdentityRoleRepository _roleRepository; private readonly IIdentityRoleRepository _roleRepository;
private readonly IPermissionAppServiceHelper _permissionAppServiceHelper;
public IdentityRoleAppService( public IdentityRoleAppService(
IdentityRoleManager roleManager, IdentityRoleManager roleManager,
IIdentityRoleRepository roleRepository) IIdentityRoleRepository roleRepository,
IPermissionAppServiceHelper permissionAppServiceHelper)
{ {
_roleManager = roleManager; _roleManager = roleManager;
_roleRepository = roleRepository; _roleRepository = roleRepository;
_permissionAppServiceHelper = permissionAppServiceHelper;
} }
public async Task<IdentityRoleDto> GetAsync(Guid id) public async Task<IdentityRoleDto> GetAsync(Guid id)
@ -46,6 +51,18 @@ namespace Volo.Abp.Identity
return ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(list); return ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(list);
} }
public async Task<GetPermissionListResultDto> GetPermissionsAsync(Guid id)
{
var role = await _roleRepository.GetAsync(id);
return await _permissionAppServiceHelper.GetAsync(RolePermissionValueProvider.ProviderName, role.Name); //TODO: User normalized role name instad of name?
}
public async Task UpdatePermissionsAsync(Guid id, UpdatePermissionsDto input)
{
var role = await _roleRepository.GetAsync(id);
await _permissionAppServiceHelper.UpdateAsync(RolePermissionValueProvider.ProviderName, role.Name, input);
}
[Authorize(IdentityPermissions.Roles.Create)] [Authorize(IdentityPermissions.Roles.Create)]
public async Task<IdentityRoleDto> CreateAsync(IdentityRoleCreateDto input) public async Task<IdentityRoleDto> CreateAsync(IdentityRoleCreateDto input)
{ {

19
src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs

@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Dtos;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
{ {
@ -11,11 +13,16 @@ namespace Volo.Abp.Identity
{ {
private readonly IdentityUserManager _userManager; private readonly IdentityUserManager _userManager;
private readonly IIdentityUserRepository _userRepository; private readonly IIdentityUserRepository _userRepository;
private readonly IPermissionAppServiceHelper _permissionAppServiceHelper;
public IdentityUserAppService(IdentityUserManager userManager, IIdentityUserRepository userRepository) public IdentityUserAppService(
IdentityUserManager userManager,
IIdentityUserRepository userRepository,
IPermissionAppServiceHelper permissionAppServiceHelper)
{ {
_userManager = userManager; _userManager = userManager;
_userRepository = userRepository; _userRepository = userRepository;
_permissionAppServiceHelper = permissionAppServiceHelper;
} }
public async Task<IdentityUserDto> GetAsync(Guid id) public async Task<IdentityUserDto> GetAsync(Guid id)
@ -89,6 +96,16 @@ namespace Volo.Abp.Identity
CheckIdentityErrors(await _userManager.SetRolesAsync(user, input.RoleNames)); CheckIdentityErrors(await _userManager.SetRolesAsync(user, input.RoleNames));
} }
public async Task<GetPermissionListResultDto> GetPermissionsAsync(Guid id)
{
return await _permissionAppServiceHelper.GetAsync(UserPermissionValueProvider.ProviderName, id.ToString());
}
public async Task UpdatePermissionsAsync(Guid id, UpdatePermissionsDto input)
{
await _permissionAppServiceHelper.UpdateAsync(UserPermissionValueProvider.ProviderName, id.ToString(), input);
}
private async Task UpdateUserByInput(IdentityUser user, IdentityUserCreateOrUpdateDtoBase input) private async Task UpdateUserByInput(IdentityUser user, IdentityUserCreateOrUpdateDtoBase input)
{ {
CheckIdentityErrors(await _userManager.SetEmailAsync(user, input.Email)); CheckIdentityErrors(await _userManager.SetEmailAsync(user, input.Email));

51
src/Volo.Abp.Identity.Web/Permissions/IdentityPermissionAppServiceGateway.cs

@ -0,0 +1,51 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Permissions;
using Volo.Abp.Permissions.Web.Pages.AbpPermissions;
namespace Volo.Abp.Identity.Web.Permissions
{
//TODO: Instead of creating such a gateway/adapter, we can implement a common interface for app services, like IHasPermissionManagementApi and manage it dynamically!
public class IdentityPermissionAppServiceGateway : IPermissionAppServiceGateway, ITransientDependency
{
private readonly IIdentityUserAppService _userAppService;
private readonly IIdentityRoleAppService _roleAppService;
public IdentityPermissionAppServiceGateway(IIdentityUserAppService userAppService, IIdentityRoleAppService roleAppService)
{
_userAppService = userAppService;
_roleAppService = roleAppService;
}
public async Task<GetPermissionListResultDto> GetAsync(string providerName, string providerKey)
{
switch (providerName)
{
case UserPermissionValueProvider.ProviderName:
return await _userAppService.GetPermissionsAsync(Guid.Parse(providerKey));
case RolePermissionValueProvider.ProviderName:
return await _roleAppService.GetPermissionsAsync(Guid.Parse(providerKey));
default:
throw new NotImplementedException();
}
}
public async Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input)
{
switch (providerName)
{
case UserPermissionValueProvider.ProviderName:
await _userAppService.UpdatePermissionsAsync(Guid.Parse(providerKey), input);
break;
case RolePermissionValueProvider.ProviderName:
await _roleAppService.UpdatePermissionsAsync(Guid.Parse(providerKey), input);
break;
default:
throw new NotImplementedException();
}
}
}
}

2
src/Volo.Abp.Identity.Web/wwwroot/modules/identity/views/roles/index.js

@ -59,7 +59,7 @@
action: function (data) { action: function (data) {
_permissionsModal.open({ _permissionsModal.open({
providerName: 'Role', providerName: 'Role',
providerKey: data.record.name providerKey: data.record.id
}); });
} }
}, },

6
src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsApplicationContractsModule.cs

@ -1,5 +1,4 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
namespace Volo.Abp.Permissions namespace Volo.Abp.Permissions
@ -10,11 +9,6 @@ namespace Volo.Abp.Permissions
{ {
public override void ConfigureServices(IServiceCollection services) public override void ConfigureServices(IServiceCollection services)
{ {
services.Configure<PermissionOptions>(options =>
{
options.DefinitionProviders.Add<PermissionsPermissionDefinitionProvider>();
});
services.AddAssemblyOf<AbpPermissionsApplicationContractsModule>(); services.AddAssemblyOf<AbpPermissionsApplicationContractsModule>();
} }
} }

13
src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IdentityPermissions.cs

@ -1,13 +0,0 @@
namespace Volo.Abp.Permissions
{
public static class PermissionPermissions
{
public const string GroupName = "AbpPermissions";
public static class Permissions
{
public const string Default = GroupName + ".Permissions";
public const string Update = Default + ".Update";
}
}
}

15
src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionsPermissionDefinitionProvider.cs

@ -1,15 +0,0 @@
using Volo.Abp.Authorization.Permissions;
namespace Volo.Abp.Permissions
{
public class PermissionsPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var group = context.AddGroup(PermissionPermissions.GroupName);
var permissions = group.AddPermission(PermissionPermissions.Permissions.Default);
permissions.AddChild(PermissionPermissions.Permissions.Update);
}
}
}

3
src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IPermissionAppService.cs → src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/IPermissionAppServiceHelper.cs

@ -1,10 +1,9 @@
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations; using JetBrains.Annotations;
using Volo.Abp.Application.Services;
namespace Volo.Abp.Permissions namespace Volo.Abp.Permissions
{ {
public interface IPermissionAppService : IApplicationService public interface IPermissionAppServiceHelper
{ {
Task<GetPermissionListResultDto> GetAsync([NotNull] string providerName, [NotNull] string providerKey); Task<GetPermissionListResultDto> GetAsync([NotNull] string providerName, [NotNull] string providerKey);

9
src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppService.cs → src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppServiceHelper.cs

@ -1,18 +1,16 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions; using Volo.Abp.Authorization.Permissions;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Permissions namespace Volo.Abp.Permissions
{ {
[Authorize(PermissionPermissions.Permissions.Default)] public class PermissionAppServiceHelper : IPermissionAppServiceHelper, ITransientDependency
public class PermissionAppService : ApplicationService, IPermissionAppService
{ {
private readonly IPermissionManager _permissionManager; private readonly IPermissionManager _permissionManager;
private readonly IPermissionDefinitionManager _permissionDefinitionManager; private readonly IPermissionDefinitionManager _permissionDefinitionManager;
public PermissionAppService( public PermissionAppServiceHelper(
IPermissionManager permissionManager, IPermissionManager permissionManager,
IPermissionDefinitionManager permissionDefinitionManager) IPermissionDefinitionManager permissionDefinitionManager)
{ {
@ -68,7 +66,6 @@ namespace Volo.Abp.Permissions
return result; return result;
} }
[Authorize(PermissionPermissions.Permissions.Update)]
public async Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input) public async Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input)
{ {
foreach (var permission in input.Permissions) foreach (var permission in input.Permissions)

12
src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/IPermissionAppServiceHelper.cs

@ -0,0 +1,12 @@
using System.Threading.Tasks;
using JetBrains.Annotations;
namespace Volo.Abp.Permissions.Web.Pages.AbpPermissions
{
public interface IPermissionAppServiceGateway
{
Task<GetPermissionListResultDto> GetAsync([NotNull] string providerName, [NotNull] string providerKey);
Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdatePermissionsDto input);
}
}

18
src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/NotImplementedPermissionAppServiceGateway.cs

@ -0,0 +1,18 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Permissions.Web.Pages.AbpPermissions
{
public class NotImplementedPermissionAppServiceGateway : IPermissionAppServiceGateway, ISingletonDependency
{
public Task<GetPermissionListResultDto> GetAsync(string providerName, string providerKey)
{
throw new System.NotImplementedException();
}
public Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input)
{
throw new System.NotImplementedException();
}
}
}

1
src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml

@ -1,6 +1,5 @@
@page @page
@using Volo.Abp.Permissions.Web.Pages.AbpPermissions @using Volo.Abp.Permissions.Web.Pages.AbpPermissions
@using Volo.Abp.Session
@model PermissionManagementModal @model PermissionManagementModal
@{ @{
Layout = null; Layout = null;

12
src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml.cs

@ -9,7 +9,7 @@ namespace Volo.Abp.Permissions.Web.Pages.AbpPermissions
{ {
public class PermissionManagementModal : AbpPageModel public class PermissionManagementModal : AbpPageModel
{ {
private readonly IPermissionAppService _permissionAppService; private readonly IPermissionAppServiceGateway _permissionAppServiceGateway;
[Required] [Required]
[HiddenInput] [HiddenInput]
@ -24,24 +24,22 @@ namespace Volo.Abp.Permissions.Web.Pages.AbpPermissions
[BindProperty] [BindProperty]
public List<PermissionGroupViewModel> Groups { get; set; } public List<PermissionGroupViewModel> Groups { get; set; }
public PermissionManagementModal(IPermissionAppService permissionAppService) public PermissionManagementModal(IPermissionAppServiceGateway permissionAppServiceGateway)
{ {
_permissionAppService = permissionAppService; _permissionAppServiceGateway = permissionAppServiceGateway;
} }
public async Task OnGetAsync() public async Task OnGetAsync()
{ {
ValidateModel(); ValidateModel();
await CheckPolicyAsync(PermissionPermissions.Permissions.Default);
var result = await _permissionAppService.GetAsync(ProviderName, ProviderKey); var result = await _permissionAppServiceGateway.GetAsync(ProviderName, ProviderKey);
Groups = ObjectMapper.Map<List<PermissionGroupDto>, List<PermissionGroupViewModel>>(result.Groups); Groups = ObjectMapper.Map<List<PermissionGroupDto>, List<PermissionGroupViewModel>>(result.Groups);
} }
public async Task<IActionResult> OnPostAsync() public async Task<IActionResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
await CheckPolicyAsync(PermissionPermissions.Permissions.Update);
var updatePermissionDtos = Groups var updatePermissionDtos = Groups
.SelectMany(g => g.Permissions) .SelectMany(g => g.Permissions)
@ -52,7 +50,7 @@ namespace Volo.Abp.Permissions.Web.Pages.AbpPermissions
}) })
.ToArray(); .ToArray();
await _permissionAppService.UpdateAsync( await _permissionAppServiceGateway.UpdateAsync(
ProviderName, ProviderName,
ProviderKey, ProviderKey,
new UpdatePermissionsDto new UpdatePermissionsDto

Loading…
Cancel
Save