diff --git a/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj b/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
index da73098120..bbf7d8a214 100644
--- a/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
+++ b/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
@@ -17,6 +17,7 @@
+
diff --git a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/AbpIdentityApplicationContractsModule.cs b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/AbpIdentityApplicationContractsModule.cs
index 54b4b99a24..a5444b279e 100644
--- a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/AbpIdentityApplicationContractsModule.cs
+++ b/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)
diff --git a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs
index cc72600e16..e723226ac1 100644
--- a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs
+++ b/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> GetAllListAsync();
+
+ Task GetPermissionsAsync(Guid id);
+
+ Task UpdatePermissionsAsync(Guid id, UpdatePermissionsDto input);
}
}
diff --git a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs b/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs
index c620ebd917..52330478b7 100644
--- a/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs
+++ b/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> GetRolesAsync(Guid id);
Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input);
+
+ Task GetPermissionsAsync(Guid id);
+
+ Task UpdatePermissionsAsync(Guid id, UpdatePermissionsDto input);
}
}
diff --git a/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj b/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj
index 95ecf93245..475290bd98 100644
--- a/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj
+++ b/src/Volo.Abp.Identity.Application/Volo.Abp.Identity.Application.csproj
@@ -17,6 +17,7 @@
+
diff --git a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModule.cs b/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModule.cs
index 23c80bcab6..e37bde87d0 100644
--- a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModule.cs
+++ b/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
{
diff --git a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs b/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs
index f3e0246d49..5509ad1158 100644
--- a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs
+++ b/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 GetAsync(Guid id)
@@ -46,6 +51,18 @@ namespace Volo.Abp.Identity
return ObjectMapper.Map, List>(list);
}
+ public async Task 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 CreateAsync(IdentityRoleCreateDto input)
{
diff --git a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
index df9583d076..76d7137657 100644
--- a/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
+++ b/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 GetAsync(Guid id)
@@ -89,6 +96,16 @@ namespace Volo.Abp.Identity
CheckIdentityErrors(await _userManager.SetRolesAsync(user, input.RoleNames));
}
+ public async Task 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));
diff --git a/src/Volo.Abp.Identity.Web/Permissions/IdentityPermissionAppServiceGateway.cs b/src/Volo.Abp.Identity.Web/Permissions/IdentityPermissionAppServiceGateway.cs
new file mode 100644
index 0000000000..512f994a6b
--- /dev/null
+++ b/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 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();
+ }
+ }
+ }
+}
diff --git a/src/Volo.Abp.Identity.Web/wwwroot/modules/identity/views/roles/index.js b/src/Volo.Abp.Identity.Web/wwwroot/modules/identity/views/roles/index.js
index 5dd7eb4e23..ebfef708ef 100644
--- a/src/Volo.Abp.Identity.Web/wwwroot/modules/identity/views/roles/index.js
+++ b/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
});
}
},
diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsApplicationContractsModule.cs b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsApplicationContractsModule.cs
index 4c49d556b2..21bd2092ac 100644
--- a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/AbpPermissionsApplicationContractsModule.cs
+++ b/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(options =>
- {
- options.DefinitionProviders.Add();
- });
-
services.AddAssemblyOf();
}
}
diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IdentityPermissions.cs b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IdentityPermissions.cs
deleted file mode 100644
index cea8d7504f..0000000000
--- a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IdentityPermissions.cs
+++ /dev/null
@@ -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";
- }
- }
-}
\ No newline at end of file
diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionsPermissionDefinitionProvider.cs b/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionsPermissionDefinitionProvider.cs
deleted file mode 100644
index 6391ae2087..0000000000
--- a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/PermissionsPermissionDefinitionProvider.cs
+++ /dev/null
@@ -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);
- }
- }
-}
diff --git a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IPermissionAppService.cs b/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/IPermissionAppServiceHelper.cs
similarity index 76%
rename from src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IPermissionAppService.cs
rename to src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/IPermissionAppServiceHelper.cs
index 169944d950..2a26b00bee 100644
--- a/src/Volo.Abp.Permissions.Application.Contracts/Volo/Abp/Permissions/IPermissionAppService.cs
+++ b/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 GetAsync([NotNull] string providerName, [NotNull] string providerKey);
diff --git a/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppService.cs b/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppServiceHelper.cs
similarity index 89%
rename from src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppService.cs
rename to src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppServiceHelper.cs
index 5bce2fb17a..f3805609e5 100644
--- a/src/Volo.Abp.Permissions.Application/Volo/Abp/Permissions/PermissionAppService.cs
+++ b/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)
diff --git a/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/IPermissionAppServiceHelper.cs b/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/IPermissionAppServiceHelper.cs
new file mode 100644
index 0000000000..bf3c3c4105
--- /dev/null
+++ b/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 GetAsync([NotNull] string providerName, [NotNull] string providerKey);
+
+ Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdatePermissionsDto input);
+ }
+}
diff --git a/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/NotImplementedPermissionAppServiceGateway.cs b/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/NotImplementedPermissionAppServiceGateway.cs
new file mode 100644
index 0000000000..78abae0100
--- /dev/null
+++ b/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 GetAsync(string providerName, string providerKey)
+ {
+ throw new System.NotImplementedException();
+ }
+
+ public Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input)
+ {
+ throw new System.NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml b/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml
index 2849cc9eb7..452fc85b04 100644
--- a/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml
+++ b/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;
diff --git a/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml.cs b/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml.cs
index bc7c8bfd82..6774e8d827 100644
--- a/src/Volo.Abp.Permissions.Web/Pages/AbpPermissions/PermissionManagementModal.cshtml.cs
+++ b/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 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>(result.Groups);
}
public async Task 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