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.Ddd\Volo.Abp.Ddd.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>
</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.Permissions;
using Volo.Abp.Modularity;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity
{
[DependsOn(typeof(AbpIdentityDomainSharedModule))]
[DependsOn(typeof(AbpAuthorizationModule))]
[DependsOn(typeof(AbpDddModule))]
[DependsOn(typeof(AbpPermissionsApplicationContractsModule))]
public class AbpIdentityApplicationContractsModule : AbpModule
{
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.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity
{
@ -9,5 +10,9 @@ namespace Volo.Abp.Identity
{
//TODO: remove after a better design
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 Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity
{
@ -10,5 +11,9 @@ namespace Volo.Abp.Identity
Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id);
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.Identity.Application.Contracts\Volo.Abp.Identity.Application.Contracts.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" />
</ItemGroup>

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

@ -10,7 +10,8 @@ namespace Volo.Abp.Identity
typeof(AbpIdentityDomainModule),
typeof(AbpIdentityApplicationContractsModule),
typeof(AbpAutoMapperModule),
typeof(AbpSessionModule)
typeof(AbpSessionModule),
typeof(AbpPermissionsApplicationModule)
)]
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 Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity
{
@ -12,13 +14,16 @@ namespace Volo.Abp.Identity
{
private readonly IdentityRoleManager _roleManager;
private readonly IIdentityRoleRepository _roleRepository;
private readonly IPermissionAppServiceHelper _permissionAppServiceHelper;
public IdentityRoleAppService(
IdentityRoleManager roleManager,
IIdentityRoleRepository roleRepository)
IIdentityRoleRepository roleRepository,
IPermissionAppServiceHelper permissionAppServiceHelper)
{
_roleManager = roleManager;
_roleRepository = roleRepository;
_permissionAppServiceHelper = permissionAppServiceHelper;
}
public async Task<IdentityRoleDto> GetAsync(Guid id)
@ -46,6 +51,18 @@ namespace Volo.Abp.Identity
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)]
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 Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Permissions;
namespace Volo.Abp.Identity
{
@ -11,11 +13,16 @@ namespace Volo.Abp.Identity
{
private readonly IdentityUserManager _userManager;
private readonly IIdentityUserRepository _userRepository;
private readonly IPermissionAppServiceHelper _permissionAppServiceHelper;
public IdentityUserAppService(IdentityUserManager userManager, IIdentityUserRepository userRepository)
public IdentityUserAppService(
IdentityUserManager userManager,
IIdentityUserRepository userRepository,
IPermissionAppServiceHelper permissionAppServiceHelper)
{
_userManager = userManager;
_userRepository = userRepository;
_permissionAppServiceHelper = permissionAppServiceHelper;
}
public async Task<IdentityUserDto> GetAsync(Guid id)
@ -89,6 +96,16 @@ namespace Volo.Abp.Identity
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)
{
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) {
_permissionsModal.open({
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 Volo.Abp.Authorization.Permissions;
using Volo.Abp.Modularity;
namespace Volo.Abp.Permissions
@ -10,11 +9,6 @@ namespace Volo.Abp.Permissions
{
public override void ConfigureServices(IServiceCollection services)
{
services.Configure<PermissionOptions>(options =>
{
options.DefinitionProviders.Add<PermissionsPermissionDefinitionProvider>();
});
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 JetBrains.Annotations;
using Volo.Abp.Application.Services;
namespace Volo.Abp.Permissions
{
public interface IPermissionAppService : IApplicationService
public interface IPermissionAppServiceHelper
{
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.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Services;
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Permissions
{
[Authorize(PermissionPermissions.Permissions.Default)]
public class PermissionAppService : ApplicationService, IPermissionAppService
public class PermissionAppServiceHelper : IPermissionAppServiceHelper, ITransientDependency
{
private readonly IPermissionManager _permissionManager;
private readonly IPermissionDefinitionManager _permissionDefinitionManager;
public PermissionAppService(
public PermissionAppServiceHelper(
IPermissionManager permissionManager,
IPermissionDefinitionManager permissionDefinitionManager)
{
@ -68,7 +66,6 @@ namespace Volo.Abp.Permissions
return result;
}
[Authorize(PermissionPermissions.Permissions.Update)]
public async Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input)
{
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
@using Volo.Abp.Permissions.Web.Pages.AbpPermissions
@using Volo.Abp.Session
@model PermissionManagementModal
@{
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
{
private readonly IPermissionAppService _permissionAppService;
private readonly IPermissionAppServiceGateway _permissionAppServiceGateway;
[Required]
[HiddenInput]
@ -24,24 +24,22 @@ namespace Volo.Abp.Permissions.Web.Pages.AbpPermissions
[BindProperty]
public List<PermissionGroupViewModel> Groups { get; set; }
public PermissionManagementModal(IPermissionAppService permissionAppService)
public PermissionManagementModal(IPermissionAppServiceGateway permissionAppServiceGateway)
{
_permissionAppService = permissionAppService;
_permissionAppServiceGateway = permissionAppServiceGateway;
}
public async Task OnGetAsync()
{
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);
}
public async Task<IActionResult> OnPostAsync()
{
ValidateModel();
await CheckPolicyAsync(PermissionPermissions.Permissions.Update);
var updatePermissionDtos = Groups
.SelectMany(g => g.Permissions)
@ -52,7 +50,7 @@ namespace Volo.Abp.Permissions.Web.Pages.AbpPermissions
})
.ToArray();
await _permissionAppService.UpdateAsync(
await _permissionAppServiceGateway.UpdateAsync(
ProviderName,
ProviderKey,
new UpdatePermissionsDto

Loading…
Cancel
Save