Browse Source

feat(permission-management): add resource permission management features

pull/24374/head
maliming 11 months ago
parent
commit
25f68775e7
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 1
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml
  2. 14
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js
  3. 1
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml
  4. 15
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js
  5. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionDefinitionListResultDto.cs
  6. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionWithProviderListResultDto.cs
  7. 6
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs
  8. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionDefinitionDto.cs
  9. 10
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionWithProdiverGrantInfoDto.cs
  10. 18
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Test.cs
  11. 28
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/TestPermissionDefinitionProvider.cs
  12. 12
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/UpdateResourcePermissionDto.cs
  13. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/UpdateResourcePermissionsDto.cs
  14. 71
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs
  15. 3
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs
  16. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionGrant.cs
  17. 44
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs
  18. 30
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/PermissionsClientProxy.Generated.cs
  19. 330
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json
  20. 29
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs
  21. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebModule.cs
  22. 62
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/AddResourcePermissionManagementModal.cshtml
  23. 76
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/AddResourcePermissionManagementModal.cshtml.cs
  24. 31
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/ResourcePermissionManagementModal.cshtml
  25. 58
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/ResourcePermissionManagementModal.cshtml.cs
  26. 49
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/UpdateResourcePermissionManagementModal.cshtml
  27. 79
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/UpdateResourcePermissionManagementModal.cshtml.cs
  28. 11
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/add-resource-permission-management-modal.js
  29. 126
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/resource-permission-management-modal.js
  30. 11
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/update-resource-permission-management-modal.js
  31. 38
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/wwwroot/client-proxies/permissionManagement-proxy.js

1
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml

@ -28,6 +28,7 @@
<abp-script-bundle name="@typeof(IndexModel).FullName">
<abp-script src="/client-proxies/identity-proxy.js" />
<abp-script src="/Pages/AbpPermissionManagement/permission-management-modal.js" />
<abp-script src="/Pages/AbpPermissionManagement/resource-permission-management-modal.js" />
<abp-script src="/Pages/identity/roles/index.js" />
</abp-script-bundle>
}

14
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/index.js

@ -5,6 +5,10 @@
var _permissionsModal = new abp.ModalManager(
abp.appPath + 'AbpPermissionManagement/PermissionManagementModal'
);
var _resourcePermissionsModal = new abp.ModalManager({
viewUrl: abp.appPath + "AbpPermissionManagement/ResourcePermissionManagementModal",
modalClass: 'ResourcePermissionManagement'
});
var _editModal = new abp.ModalManager(
abp.appPath + 'Identity/Roles/EditModal'
);
@ -42,6 +46,16 @@
});
},
},
{
text: l('ResourcePermissions'),
action: function (data) {
_resourcePermissionsModal.open({
resourceName: 'Volo.Abp.Identity.IdentityRole',
resourceKey: data.record.name,
resourceDisplayName: data.record.name + '(Volo.Abp.Identity.IdentityRole)'
});
},
},
{
text: l('Delete'),
visible: function (data) {

1
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml

@ -29,6 +29,7 @@
<abp-script-bundle name="@typeof(IndexModel).FullName">
<abp-script src="/client-proxies/identity-proxy.js" />
<abp-script src="/Pages/AbpPermissionManagement/permission-management-modal.js" />
<abp-script src="/Pages/AbpPermissionManagement/resource-permission-management-modal.js" />
<abp-script src="/Pages/identity/users/index.js" />
</abp-script-bundle>
}

15
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/index.js

@ -50,7 +50,10 @@
var _permissionsModal = new abp.ModalManager(
abp.appPath + 'AbpPermissionManagement/PermissionManagementModal'
);
var _resourcePermissionsModal = new abp.ModalManager({
viewUrl: abp.appPath + "AbpPermissionManagement/ResourcePermissionManagementModal",
modalClass: 'ResourcePermissionManagement'
});
var _dataTable = null;
abp.ui.extensions.entityActions.get('identity.user').addContributor(
@ -81,6 +84,16 @@
});
},
},
{
text: l('ResourcePermissions'),
action: function (data) {
_resourcePermissionsModal.open({
resourceName: 'Volo.Abp.Identity.IdentityUser',
resourceKey: data.record.name,
resourceDisplayName: data.record.name + '(Volo.Abp.Identity.IdentityUser)'
});
},
},
{
text: l('Delete'),
visible: function(data) {

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionDefinitionListResultDto.cs

@ -0,0 +1,8 @@
using System.Collections.Generic;
namespace Volo.Abp.PermissionManagement;
public class GetResourcePermissionDefinitionListResultDto
{
public List<ResourcePermissionDefinitionDto> Permissions { get; set; }
}

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/GetResourcePermissionWithProviderListResultDto.cs

@ -0,0 +1,8 @@
using System.Collections.Generic;
namespace Volo.Abp.PermissionManagement;
public class GetResourcePermissionWithProviderListResultDto
{
public List<ResourcePermissionWithProdiverGrantInfoDto> Permissions { get; set; }
}

6
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/IPermissionAppService.cs

@ -12,7 +12,13 @@ public interface IPermissionAppService : IApplicationService
Task UpdateAsync([NotNull] string providerName, [NotNull] string providerKey, UpdatePermissionsDto input);
Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync([NotNull] string resourceName);
Task<GetResourcePermissionListResultDto> GetResourceAsync([NotNull] string resourceName, [NotNull] string resourceKey);
Task<GetResourcePermissionWithProviderListResultDto> GetResourceByProviderAsync([NotNull] string resourceName, [NotNull] string resourceKey, [NotNull] string providerName, [NotNull] string providerKey);
Task UpdateResourceAsync([NotNull] string resourceName, [NotNull] string resourceKey, UpdateResourcePermissionsDto input);
Task DeleteResourceAsync([NotNull] string resourceName, [NotNull] string resourceKey, [NotNull] string providerName, [NotNull] string providerKey);
}

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionDefinitionDto.cs

@ -0,0 +1,8 @@
namespace Volo.Abp.PermissionManagement;
public class ResourcePermissionDefinitionDto
{
public string Name { get; set; }
public string DisplayName { get; set; }
}

10
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/ResourcePermissionWithProdiverGrantInfoDto.cs

@ -0,0 +1,10 @@
namespace Volo.Abp.PermissionManagement;
public class ResourcePermissionWithProdiverGrantInfoDto
{
public string Name { get; set; }
public string DisplayName { get; set; }
public bool IsGranted { get; set; }
}

18
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/Test.cs

@ -1,18 +0,0 @@
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
using Volo.Abp.PermissionManagement.Localization;
namespace Volo.Abp.PermissionManagement;
public class TestPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
context.AddResourcePermission("AbpIdentity.Resource.ChangeName", "Volo.Abp.IdentityUser", L("OnlyProviderPermissons"));
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<AbpPermissionManagementResource>(name);
}
}

28
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/TestPermissionDefinitionProvider.cs

@ -0,0 +1,28 @@
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
using Volo.Abp.PermissionManagement.Localization;
namespace Volo.Abp.PermissionManagement;
public class TestPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
context.AddResourcePermission("PR1", "Volo.Abp.Identity.IdentityRole", L("Role Resource Permission1"));
context.AddResourcePermission("PR2", "Volo.Abp.Identity.IdentityRole", L("Role Resource Permission2"));
context.AddResourcePermission("PR3", "Volo.Abp.Identity.IdentityRole", L("Role Resource Permission3"));
context.AddResourcePermission("PR4", "Volo.Abp.Identity.IdentityRole", L("Role Resource Permission4"));
context.AddResourcePermission("PR5", "Volo.Abp.Identity.IdentityRole", L("Role Resource Permission5"));
context.AddResourcePermission("PU1", "Volo.Abp.Identity.IdentityUser", L("User Resource Permission1"));
context.AddResourcePermission("PU2", "Volo.Abp.Identity.IdentityUser", L("User Resource Permission2"));
context.AddResourcePermission("PU3", "Volo.Abp.Identity.IdentityUser", L("User Resource Permission3"));
context.AddResourcePermission("PU4", "Volo.Abp.Identity.IdentityUser", L("User Resource Permission4"));
context.AddResourcePermission("PU5", "VVolo.Abp.Identity.IdentityUser", L("User Resource Permission5"));
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<AbpPermissionManagementResource>(name);
}
}

12
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/UpdateResourcePermissionDto.cs

@ -1,12 +0,0 @@
namespace Volo.Abp.PermissionManagement;
public class UpdateResourcePermissionDto
{
public string ProviderName { get; set; }
public string ProviderKey { get; set; }
public string Name { get; set; }
public bool IsGranted { get; set; }
}

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Application.Contracts/Volo/Abp/PermissionManagement/UpdateResourcePermissionsDto.cs

@ -1,6 +1,12 @@
using System.Collections.Generic;
namespace Volo.Abp.PermissionManagement;
public class UpdateResourcePermissionsDto
{
public UpdateResourcePermissionDto[] Permissions { get; set; }
public string ProviderName { get; set; }
public string ProviderKey { get; set; }
public List<string> Permissions { get; set; }
}

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

@ -166,24 +166,36 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
}
}
public virtual async Task<GetResourcePermissionListResultDto> GetResourceAsync(string resourceName, string resourceKey)
[Authorize] //TODO: Check permission
public virtual async Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync(string resourceName)
{
var result = new GetResourcePermissionListResultDto
var result = new GetResourcePermissionDefinitionListResultDto
{
Permissions = new List<ResourcePermissionGrantInfoDto>()
Permissions = new List<ResourcePermissionDefinitionDto>()
};
var multiTenancySide = CurrentTenant.GetMultiTenancySide();
var resourcePermissions = new List<PermissionDefinition>();
foreach (var resourcePermission in (await PermissionDefinitionManager.GetResourcePermissionsAsync())
.Where(x => x.IsEnabled && x.MultiTenancySide.HasFlag(multiTenancySide) && x.ResourceName == resourceName))
var resourcePermissions = await ResourcePermissionManager.GetAvailableResourcePermissionsAsync(resourceName);
foreach (var resourcePermission in resourcePermissions)
{
if (await SimpleStateCheckerManager.IsEnabledAsync(resourcePermission))
result.Permissions.Add(new ResourcePermissionDefinitionDto()
{
resourcePermissions.Add(resourcePermission);
}
Name = resourcePermission.Name,
DisplayName = resourcePermission.DisplayName?.Localize(StringLocalizerFactory),
});
}
return result;
}
[Authorize] //TODO: Check permission
public virtual async Task<GetResourcePermissionListResultDto> GetResourceAsync(string resourceName, string resourceKey)
{
var result = new GetResourcePermissionListResultDto
{
Permissions = new List<ResourcePermissionGrantInfoDto>()
};
var resourcePermissions = await ResourcePermissionManager.GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissionGrantsGroup = await ResourcePermissionManager.GetAllGroupAsync(resourceName, resourceKey);
foreach (var resourcePermissionGrant in resourcePermissionGrantsGroup)
{
@ -209,11 +221,46 @@ public class PermissionAppService : ApplicationService, IPermissionAppService
return result;
}
[Authorize] //TODO: Check permission
public virtual async Task<GetResourcePermissionWithProviderListResultDto> GetResourceByProviderAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
var result = new GetResourcePermissionWithProviderListResultDto
{
Permissions = new List<ResourcePermissionWithProdiverGrantInfoDto>()
};
var resourcePermissionGrants = await ResourcePermissionManager.GetAllAsync(resourceName, resourceKey, providerName, providerKey);
foreach (var resourcePermission in resourcePermissionGrants)
{
result.Permissions.Add(new ResourcePermissionWithProdiverGrantInfoDto
{
Name = resourcePermission.Name,
DisplayName = (await PermissionDefinitionManager.GetResourcePermissionOrNullAsync(resourceName))?.DisplayName?.Localize(StringLocalizerFactory),
IsGranted = resourcePermission.IsGranted
});
}
return result;
}
[Authorize] //TODO: Check permission
public virtual async Task UpdateResourceAsync(string resourceName, string resourceKey, UpdateResourcePermissionsDto input)
{
foreach (var permissionDto in input.Permissions)
var resourcePermissions = await ResourcePermissionManager.GetAvailableResourcePermissionsAsync(resourceName);
foreach (var resourcePermission in resourcePermissions)
{
var isGranted = !input.Permissions.IsNullOrEmpty() && input.Permissions.Any(p => p == resourcePermission.Name);
await ResourcePermissionManager.SetAsync(resourcePermission.Name, resourceName, resourceKey, input.ProviderName, input.ProviderKey, isGranted);
}
}
[Authorize] //TODO: Check permission
public virtual async Task DeleteResourceAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
var resourcePermissions = await ResourcePermissionManager.GetAvailableResourcePermissionsAsync(resourceName);
foreach (var resourcePermission in resourcePermissions)
{
await ResourcePermissionManager.SetAsync(permissionDto.Name, resourceName, resourceKey, permissionDto.ProviderName, permissionDto.ProviderKey, permissionDto.IsGranted);
await ResourcePermissionManager.SetAsync(resourcePermission.Name, resourceName, resourceKey, providerName, providerKey, false);
}
}

3
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/IResourcePermissionManager.cs

@ -1,10 +1,13 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Authorization.Permissions;
namespace Volo.Abp.PermissionManagement;
public interface IResourcePermissionManager
{
Task<List<PermissionDefinition>> GetAvailableResourcePermissionsAsync(string resourceName);
Task<PermissionWithGrantedProviders> GetAsync(
string permissionName,
string resourceName,

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionGrant.cs

@ -33,20 +33,20 @@ public class ResourcePermissionGrant : Entity<Guid>, IMultiTenant
public ResourcePermissionGrant(
Guid id,
[NotNull] string name,
[NotNull] string providerName,
[CanBeNull] string providerKey,
[NotNull] string resourceName,
[NotNull] string resourceKey,
[NotNull] string providerName,
[CanBeNull] string providerKey,
Guid? tenantId = null)
{
Check.NotNull(name, nameof(name));
Id = id;
Name = Check.NotNullOrWhiteSpace(name, nameof(name));
ProviderName = Check.NotNullOrWhiteSpace(providerName, nameof(providerName));
ProviderKey = Check.NotNullOrWhiteSpace(providerKey, nameof(providerKey));
ResourceName = Check.NotNullOrWhiteSpace(resourceName, nameof(resourceName));
ResourceKey = Check.NotNullOrWhiteSpace(resourceKey, nameof(resourceKey));
ProviderName = Check.NotNullOrWhiteSpace(providerName, nameof(providerName));
ProviderKey = Check.NotNullOrWhiteSpace(providerKey, nameof(providerKey));
TenantId = tenantId;
}
}

44
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/ResourcePermissionManager.cs

@ -60,6 +60,22 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
);
}
public virtual async Task<List<PermissionDefinition>> GetAvailableResourcePermissionsAsync(string resourceName)
{
var multiTenancySide = CurrentTenant.GetMultiTenancySide();
var resourcePermissions = new List<PermissionDefinition>();
foreach (var resourcePermission in (await PermissionDefinitionManager.GetResourcePermissionsAsync())
.Where(x => x.IsEnabled && x.MultiTenancySide.HasFlag(multiTenancySide) && x.ResourceName == resourceName))
{
if (await SimpleStateCheckerManager.IsEnabledAsync(resourcePermission))
{
resourcePermissions.Add(resourcePermission);
}
}
return resourcePermissions;
}
public virtual async Task<PermissionWithGrantedProviders> GetAsync(string permissionName, string resourceName, string resourceKey, string providerName, string providerKey)
{
var permission = await PermissionDefinitionManager.GetResourcePermissionOrNullAsync(permissionName);
@ -118,7 +134,7 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
public virtual async Task<List<PermissionWithGrantedProviders>> GetAllAsync(string resourceName, string resourceKey)
{
var resourcePermissionDefinitions = (await PermissionDefinitionManager.GetResourcePermissionsAsync()).Where(x => x.ResourceName == resourceName).ToArray();
var resourcePermissionDefinitions = await GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissionGrants = await ResourcePermissionGrantRepository.GetPermissionsAsync(resourceName, resourceKey);
var result = new List<PermissionWithGrantedProviders>();
foreach (var resourcePermissionDefinition in resourcePermissionDefinitions)
@ -126,7 +142,7 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
var permissionWithGrantedProviders = new PermissionWithGrantedProviders(resourcePermissionDefinition.Name, false);
var grantedPermissions = resourcePermissionGrants
.Where(x => x.Name == resourcePermissionDefinition.Name)
.Where(x => x.Name == resourcePermissionDefinition.Name && x.ResourceName == resourceName && x.ResourceKey == resourceKey)
.ToList();
if (grantedPermissions.Any())
@ -146,14 +162,18 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
public virtual async Task<List<PermissionWithGrantedProviders>> GetAllAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
var permissionDefinitions = (await PermissionDefinitionManager.GetResourcePermissionsAsync()).Where(x => x.ResourceName == resourceName).ToArray();
var multiplePermissionWithGrantedProviders = await GetInternalAsync(permissionDefinitions, resourceName, resourceKey, providerName, providerKey);
var permissionDefinitions = await GetAvailableResourcePermissionsAsync(resourceName);
var multiplePermissionWithGrantedProviders = await GetInternalAsync(permissionDefinitions.ToArray(), resourceName, resourceKey, providerName, providerKey);
return multiplePermissionWithGrantedProviders.Result;
}
public virtual async Task<List<PermissionProviderWithPermissions>> GetAllGroupAsync(string resourceName, string resourceKey)
{
var resourcePermissions = await GetAvailableResourcePermissionsAsync(resourceName);
var resourcePermissionGrants = await ResourcePermissionGrantRepository.GetPermissionsAsync(resourceName, resourceKey);
resourcePermissionGrants = resourcePermissionGrants
.Where(x => resourcePermissions.Any(rp => rp.Name == x.Name))
.ToList();
var resourcePermissionGrantsGroup = resourcePermissionGrants.GroupBy(x => new { x.ProviderName, x.ProviderKey });
var result = new List<PermissionProviderWithPermissions>();
foreach (var resourcePermissionGrant in resourcePermissionGrantsGroup)
@ -259,10 +279,8 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
var neededCheckPermissions = new List<PermissionDefinition>();
foreach (var permission in permissions
.Where(x => x.IsEnabled)
.Where(x => x.MultiTenancySide.HasFlag(CurrentTenant.GetMultiTenancySide()))
.Where(x => !x.Providers.Any() || x.Providers.Contains(providerName)))
var resourcePermissions = await GetAvailableResourcePermissionsAsync(resourceName);
foreach (var permission in resourcePermissions)
{
if (await SimpleStateCheckerManager.IsEnabledAsync(permission))
{
@ -285,10 +303,16 @@ public class ResourcePermissionManager : IResourcePermissionManager, ISingletonD
if (providerResultDict.Value.IsGranted)
{
var permissionWithGrantedProvider = multiplePermissionWithGrantedProviders.Result
.First(x => x.Name == providerResultDict.Key);
.FirstOrDefault(x => x.Name == providerResultDict.Key);
if (permissionWithGrantedProvider == null)
{
continue;
}
permissionWithGrantedProvider.IsGranted = true;
permissionWithGrantedProvider.Providers.Add(new PermissionValueProviderInfo(provider.Name, providerResultDict.Value.ProviderKey));
permissionWithGrantedProvider.Providers.Add(
new PermissionValueProviderInfo(provider.Name, providerResultDict.Value.ProviderKey));
}
}
}

30
modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/Volo/Abp/PermissionManagement/PermissionsClientProxy.Generated.cs

@ -46,6 +46,14 @@ public partial class PermissionsClientProxy : ClientProxyBase<IPermissionAppServ
});
}
public virtual async Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync(string resourceName)
{
return await RequestAsync<GetResourcePermissionDefinitionListResultDto>(nameof(GetResourceDefinitionsAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), resourceName }
});
}
public virtual async Task<GetResourcePermissionListResultDto> GetResourceAsync(string resourceName, string resourceKey)
{
return await RequestAsync<GetResourcePermissionListResultDto>(nameof(GetResourceAsync), new ClientProxyRequestTypeValue
@ -55,6 +63,17 @@ public partial class PermissionsClientProxy : ClientProxyBase<IPermissionAppServ
});
}
public virtual async Task<GetResourcePermissionWithProviderListResultDto> GetResourceByProviderAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
return await RequestAsync<GetResourcePermissionWithProviderListResultDto>(nameof(GetResourceByProviderAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), resourceName },
{ typeof(string), resourceKey },
{ typeof(string), providerName },
{ typeof(string), providerKey }
});
}
public virtual async Task UpdateResourceAsync(string resourceName, string resourceKey, UpdateResourcePermissionsDto input)
{
await RequestAsync(nameof(UpdateResourceAsync), new ClientProxyRequestTypeValue
@ -64,4 +83,15 @@ public partial class PermissionsClientProxy : ClientProxyBase<IPermissionAppServ
{ typeof(UpdateResourcePermissionsDto), input }
});
}
public virtual async Task DeleteResourceAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
await RequestAsync(nameof(DeleteResourceAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), resourceName },
{ typeof(string), resourceKey },
{ typeof(string), providerName },
{ typeof(string), providerKey }
});
}
}

330
modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi.Client/ClientProxies/permissionManagement-generate-proxy.json

@ -179,6 +179,23 @@
"typeSimple": "System.Void"
}
},
{
"name": "GetResourceDefinitionsAsync",
"parametersOnMethod": [
{
"name": "resourceName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "Volo.Abp.PermissionManagement.GetResourcePermissionDefinitionListResultDto",
"typeSimple": "Volo.Abp.PermissionManagement.GetResourcePermissionDefinitionListResultDto"
}
},
{
"name": "GetResourceAsync",
"parametersOnMethod": [
@ -204,6 +221,47 @@
"typeSimple": "Volo.Abp.PermissionManagement.GetResourcePermissionListResultDto"
}
},
{
"name": "GetResourceByProviderAsync",
"parametersOnMethod": [
{
"name": "resourceName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "resourceKey",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "providerName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "providerKey",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "Volo.Abp.PermissionManagement.GetResourcePermissionWithProviderListResultDto",
"typeSimple": "Volo.Abp.PermissionManagement.GetResourcePermissionWithProviderListResultDto"
}
},
{
"name": "UpdateResourceAsync",
"parametersOnMethod": [
@ -236,6 +294,47 @@
"type": "System.Void",
"typeSimple": "System.Void"
}
},
{
"name": "DeleteResourceAsync",
"parametersOnMethod": [
{
"name": "resourceName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "resourceKey",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "providerName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "providerKey",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
}
}
]
}
@ -452,6 +551,43 @@
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
},
"GetResourceDefinitionsAsyncByResourceName": {
"uniqueName": "GetResourceDefinitionsAsyncByResourceName",
"name": "GetResourceDefinitionsAsync",
"httpMethod": "GET",
"url": "api/permission-management/permissions/resource-definitions",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "resourceName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "resourceName",
"name": "resourceName",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
}
],
"returnValue": {
"type": "Volo.Abp.PermissionManagement.GetResourcePermissionDefinitionListResultDto",
"typeSimple": "Volo.Abp.PermissionManagement.GetResourcePermissionDefinitionListResultDto"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
},
"GetResourceAsyncByResourceNameAndResourceKey": {
"uniqueName": "GetResourceAsyncByResourceNameAndResourceKey",
"name": "GetResourceAsync",
@ -509,6 +645,103 @@
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
},
"GetResourceByProviderAsyncByResourceNameAndResourceKeyAndProviderNameAndProviderKey": {
"uniqueName": "GetResourceByProviderAsyncByResourceNameAndResourceKeyAndProviderNameAndProviderKey",
"name": "GetResourceByProviderAsync",
"httpMethod": "GET",
"url": "api/permission-management/permissions/resource/by-provider",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "resourceName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "resourceKey",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "providerName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "providerKey",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "resourceName",
"name": "resourceName",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
},
{
"nameOnMethod": "resourceKey",
"name": "resourceKey",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
},
{
"nameOnMethod": "providerName",
"name": "providerName",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
},
{
"nameOnMethod": "providerKey",
"name": "providerKey",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
}
],
"returnValue": {
"type": "Volo.Abp.PermissionManagement.GetResourcePermissionWithProviderListResultDto",
"typeSimple": "Volo.Abp.PermissionManagement.GetResourcePermissionWithProviderListResultDto"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
},
"UpdateResourceAsyncByResourceNameAndResourceKeyAndInput": {
"uniqueName": "UpdateResourceAsyncByResourceNameAndResourceKeyAndInput",
"name": "UpdateResourceAsync",
@ -585,6 +818,103 @@
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
},
"DeleteResourceAsyncByResourceNameAndResourceKeyAndProviderNameAndProviderKey": {
"uniqueName": "DeleteResourceAsyncByResourceNameAndResourceKeyAndProviderNameAndProviderKey",
"name": "DeleteResourceAsync",
"httpMethod": "DELETE",
"url": "api/permission-management/permissions/resource",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "resourceName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "resourceKey",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "providerName",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
},
{
"name": "providerKey",
"typeAsString": "System.String, System.Private.CoreLib",
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "resourceName",
"name": "resourceName",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
},
{
"nameOnMethod": "resourceKey",
"name": "resourceKey",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
},
{
"nameOnMethod": "providerName",
"name": "providerName",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
},
{
"nameOnMethod": "providerKey",
"name": "providerKey",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": ""
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
},
"allowAnonymous": null,
"implementFrom": "Volo.Abp.PermissionManagement.IPermissionAppService"
}
}
}

29
modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs

@ -1,4 +1,5 @@
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
@ -35,15 +36,37 @@ public class PermissionsController : AbpControllerBase, IPermissionAppService
return PermissionAppService.UpdateAsync(providerName, providerKey, input);
}
[HttpGet("resource")]
[HttpGet("resource-definitions")]
public Task<GetResourcePermissionDefinitionListResultDto> GetResourceDefinitionsAsync(string resourceName)
{
return PermissionAppService.GetResourceDefinitionsAsync(resourceName);
}
[HttpGet]
[Route("resource")]
public virtual Task<GetResourcePermissionListResultDto> GetResourceAsync(string resourceName, string resourceKey)
{
return PermissionAppService.GetResourceAsync(resourceName, resourceKey);
}
[HttpPut("resource")]
[HttpGet]
[Route("resource/by-provider")]
public virtual Task<GetResourcePermissionWithProviderListResultDto> GetResourceByProviderAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
return PermissionAppService.GetResourceByProviderAsync(resourceName, resourceKey, providerName, providerKey);
}
[HttpPut]
[Route("resource")]
public virtual Task UpdateResourceAsync(string resourceName, string resourceKey, UpdateResourcePermissionsDto input)
{
return PermissionAppService.UpdateResourceAsync(resourceName, resourceKey, input);
}
[HttpDelete]
[Route("resource")]
public virtual Task DeleteResourceAsync(string resourceName, string resourceKey, string providerName, string providerKey)
{
return PermissionAppService.DeleteResourceAsync(resourceName, resourceKey, providerName, providerKey);
}
}

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/AbpPermissionManagementWebModule.cs

@ -20,7 +20,7 @@ public class AbpPermissionManagementWebModule : AbpModule
{
options.AddAssemblyResource(
typeof(AbpPermissionManagementResource),
typeof(AbpPermissionManagementWebModule).Assembly,
typeof(AbpPermissionManagementWebModule).Assembly,
typeof(AbpPermissionManagementApplicationContractsModule).Assembly
);
});

62
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/AddResourcePermissionManagementModal.cshtml

@ -0,0 +1,62 @@
@page
@using System.Web;
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
@using Volo.Abp.Localization
@using Volo.Abp.PermissionManagement.Localization
@using Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
@model AddResourcePermissionManagementModal
@inject IHtmlLocalizer<AbpPermissionManagementResource> L
@{
Layout = null;
}
<script src="/client-proxies/permissionManagement-proxy.js"></script>
<script src="/Pages/AbpPermissionManagement/add-resource-permission-management-modal.js"></script>
<form method="post" asp-page="/AbpPermissionManagement/AddResourcePermissionManagementModal">
<abp-modal>
<abp-modal-header title="@(L["AddResourcePermissions"].Value)"></abp-modal-header>
<input asp-for="@Model.ResourceName" />
<input asp-for="@Model.ResourceKey" />
<input asp-for="@Model.ResourceDisplayName" />
<abp-modal-body>
<div class="mb-3">
<label class="form-label">Resource name:</label>
<p>@(HttpUtility.HtmlEncode(Model.ResourceDisplayName))</p>
</div>
<div class="mb-3">
<label class="form-label">ProviderName:</label>
<div class="mb-1">
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" checked name="AddModel.ProviderName" id="UserProvider" value="U">
<label class="form-check-label" for="UserProvider">User</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="AddModel.ProviderName" id="RoleProvider" value="R">
<label class="form-check-label" for="RoleProvider">Role</label>
</div>
</div>
</div>
<abp-input asp-for="@Model.AddModel.ProviderKey"/>
<div class="mb-3" id="permissionList">
<div class="mb-1 d-flex align-items-center justify-content-between">
<label class="form-labe">Permissions:</label>
<div class="form-check form-switch">
<input class="form-check-input" id="grantAllresourcePermissions" type="checkbox">
<label class="form-check-label">Grant all</label>
</div>
</div>
@foreach (var permission in Model.ResourcePermissionDefinitions.Permissions)
{
<div class="form-check">
<input class="form-check-input" type="checkbox" name="AddModel.Permissions[]" value="@permission.Name">
<label class="form-check-label">@permission.DisplayName</label>
</div>
}
</div>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</form>

76
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/AddResourcePermissionManagementModal.cshtml.cs

@ -0,0 +1,76 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement;
public class AddResourcePermissionManagementModal : AbpPageModel
{
[Required]
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ResourceName { get; set; }
[Required]
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ResourceKey { get; set; }
[BindProperty(SupportsGet = true)]
[HiddenInput]
public string ResourceDisplayName { get; set; }
[BindProperty]
public ResourcePermissionViewModel AddModel { get; set; }
public GetResourcePermissionDefinitionListResultDto ResourcePermissionDefinitions { get; set; }
protected IPermissionAppService PermissionAppService { get; }
public AddResourcePermissionManagementModal(IPermissionAppService permissionAppService)
{
ObjectMapperContext = typeof(AbpPermissionManagementWebModule);
PermissionAppService = permissionAppService;
}
public virtual async Task<IActionResult> OnGetAsync()
{
ValidateModel();
ResourcePermissionDefinitions = await PermissionAppService.GetResourceDefinitionsAsync(ResourceName);
return Page();
}
public virtual async Task<IActionResult> OnPostAsync()
{
ValidateModel();
await PermissionAppService.UpdateResourceAsync(
ResourceName,
ResourceKey,
new UpdateResourcePermissionsDto()
{
ProviderName = AddModel.ProviderName,
ProviderKey = AddModel.ProviderKey,
Permissions = AddModel.Permissions ?? new List<string>()
}
);
return NoContent();
}
public class ResourcePermissionViewModel
{
[Required]
public string ProviderName { get; set; }
[Required]
public string ProviderKey { get; set; }
public List<string> Permissions { get; set; }
}
}

31
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/ResourcePermissionManagementModal.cshtml

@ -0,0 +1,31 @@
@page
@using System.Web;
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
@using Volo.Abp.Localization
@using Volo.Abp.PermissionManagement.Localization
@using Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
@model ResourcePermissionManagementModal
@inject IHtmlLocalizer<AbpPermissionManagementResource> L
@{
Layout = null;
}
<script src="/client-proxies/permissionManagement-proxy.js"></script>
<form method="post" asp-page="/AbpPermissionManagement/ResourcePermissionManagementModal">
<abp-modal size="ExtraLarge">
<abp-modal-header title="@(L["ResourcePermissions"].Value) - @(HttpUtility.HtmlEncode(Model.ResourceDisplayName))"></abp-modal-header>
<input asp-for="@Model.ResourceName" />
<input asp-for="@Model.ResourceKey" />
<input asp-for="@Model.ResourceDisplayName" />
<abp-modal-body>
<div class="d-grid gap-2 mb-2 d-md-flex justify-content-md-end">
<button class="btn btn-sm btn-primary" id="addPermission" type="button">Add Permission</button>
</div>
<abp-table id="resourcePermissionTable" class="nowrap"></abp-table>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</form>

58
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/ResourcePermissionManagementModal.cshtml.cs

@ -0,0 +1,58 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement;
public class ResourcePermissionManagementModal : AbpPageModel
{
[Required]
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ResourceName { get; set; }
[Required]
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ResourceKey { get; set; }
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ResourceDisplayName { get; set; }
public GetResourcePermissionListResultDto ResourcePermissions { get; set; }
protected IPermissionAppService PermissionAppService { get; }
public ResourcePermissionManagementModal(IPermissionAppService permissionAppService)
{
ObjectMapperContext = typeof(AbpPermissionManagementWebModule);
PermissionAppService = permissionAppService;
}
public virtual Task<IActionResult> OnGetAsync()
{
ValidateModel();
return Task.FromResult<IActionResult>(Page());
}
public virtual async Task<IActionResult> OnPostAsync()
{
ValidateModel();
return NoContent();
}
public class ResourcePermissionViewModel
{
public string ProviderName { get; set; }
public string ProviderKey { get; set; }
public List<string> Permissions { get; set; }
}
}

49
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/UpdateResourcePermissionManagementModal.cshtml

@ -0,0 +1,49 @@
@page
@using System.Web;
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
@using Volo.Abp.Localization
@using Volo.Abp.PermissionManagement.Localization
@using Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
@model UpdateResourcePermissionManagementModal
@inject IHtmlLocalizer<AbpPermissionManagementResource> L
@{
Layout = null;
}
<script src="/client-proxies/permissionManagement-proxy.js"></script>
<script src="/Pages/AbpPermissionManagement/update-resource-permission-management-modal.js"></script>
<form method="post" asp-page="/AbpPermissionManagement/UpdateResourcePermissionManagementModal">
<abp-modal>
<abp-modal-header title="@(L["UpdateResourcePermissions"].Value)"></abp-modal-header>
<input asp-for="@Model.ResourceName" />
<input asp-for="@Model.ResourceKey" />
<input asp-for="@Model.ProviderName" />
<input asp-for="@Model.ProviderKey" />
<abp-modal-body>
<div class="mb-3">
<label class="form-label">Resource name:</label>
<p>@(HttpUtility.HtmlEncode(Model.ResourceDisplayName))</p>
</div>
<div class="mb-3" id="permissionList">
<div class="mb-1 d-flex align-items-center justify-content-between">
<label class="form-labe">Permissions:</label>
<div class="form-check form-switch">
<input class="form-check-input" id="grantAllresourcePermissions" type="checkbox" checked="@Model.ResourcePermissions.Permissions.All(x => x.IsGranted)">
<label class="form-check-label">Grant all</label>
</div>
</div>
@foreach (var permission in Model.ResourcePermissions.Permissions)
{
<div class="form-check">
<input class="form-check-input" type="checkbox" name="UpdateModel.Permissions[]" value="@permission.Name" checked="@permission.IsGranted">
<label class="form-check-label">@permission.DisplayName</label>
</div>
}
</div>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal>
</form>

79
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/UpdateResourcePermissionManagementModal.cshtml.cs

@ -0,0 +1,79 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement;
public class UpdateResourcePermissionManagementModal : AbpPageModel
{
[Required]
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ResourceName { get; set; }
[Required]
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ResourceKey { get; set; }
[BindProperty(SupportsGet = true)]
public string ResourceDisplayName { get; set; }
[Required]
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ProviderName { get; set; }
[Required]
[HiddenInput]
[BindProperty(SupportsGet = true)]
public string ProviderKey { get; set; }
[BindProperty(SupportsGet = true)]
public ResourcePermissionViewModel UpdateModel { get; set; }
public GetResourcePermissionWithProviderListResultDto ResourcePermissions { get; set; }
protected IPermissionAppService PermissionAppService { get; }
public UpdateResourcePermissionManagementModal(IPermissionAppService permissionAppService)
{
ObjectMapperContext = typeof(AbpPermissionManagementWebModule);
PermissionAppService = permissionAppService;
}
public virtual async Task<IActionResult> OnGetAsync()
{
ValidateModel();
ResourcePermissions = await PermissionAppService.GetResourceByProviderAsync(ResourceName, ResourceKey, ProviderName, ProviderKey);
return Page();
}
public virtual async Task<IActionResult> OnPostAsync()
{
ValidateModel();
await PermissionAppService.UpdateResourceAsync(
ResourceName,
ResourceKey,
new UpdateResourcePermissionsDto()
{
ProviderName = ProviderName,
ProviderKey = ProviderKey,
Permissions = UpdateModel.Permissions ?? new List<string>()
}
);
return NoContent();
}
public class ResourcePermissionViewModel
{
public List<string> Permissions { get; set; }
}
}

11
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/add-resource-permission-management-modal.js

@ -0,0 +1,11 @@
var abp = abp || {};
(function ($) {
var $all = $("#grantAllresourcePermissions");
var $items = $("#permissionList input[type='checkbox']").not("#grantAllresourcePermissions");
$all.on("change", function () {
$items.prop("checked", this.checked);
});
$items.on("change", function () {
$all.prop("checked", $items.length === $items.filter(":checked").length);
});
})(jQuery);

126
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/resource-permission-management-modal.js

@ -0,0 +1,126 @@
var abp = abp || {};
(function ($) {
var l = abp.localization.getResource('AbpPermissionManagement');
var _dataTable = null;
abp.ui.extensions.entityActions.get('permissionManagement.resource').addContributor(
function (actionList) {
return actionList.addManyTail(
[
{
text: l('Edit'),
action: function (data) {
var _updateResourcePermissionsModal = new abp.ModalManager(abp.appPath + "AbpPermissionManagement/UpdateResourcePermissionManagementModal");
_updateResourcePermissionsModal.open({
resourceName: $("#ResourceName").val(),
resourceKey: $("#ResourceKey").val(),
resourceDisplayName: $("#ResourceDisplayName").val(),
providerName: data.record.providerName,
providerKey: data.record.providerKey
});
_updateResourcePermissionsModal.onResult(function () {
_dataTable.ajax.reloadEx();
});
},
},
{
text: l('Delete'),
confirmMessage: function (data) {
return l(
'ResourcePermissionDeletionConfirmationMessage',
data.record.name
);
},
action: function (data) {
volo.abp.permissionManagement.permissions.deleteResource($("#ResourceName").val(), $("#ResourceKey").val(), data.record.providerName, data.record.providerKey).then(function () {
abp.notify.info(l('SuccessfullyDeleted'));
_dataTable.ajax.reloadEx();
});
},
}
]
);
}
);
abp.ui.extensions.tableColumns.get('permissionManagement.resource').addContributor(
function (columnList) {
columnList.addManyTail(
[
{
title: l("Actions"),
rowAction: {
items: abp.ui.extensions.entityActions.get('permissionManagement.resource').actions.toArray()
}
},
{
title: l("Target"),
data: 'providerName',
render: function (data, type, row) {
return row.providerName + ' (' + row.providerKey + ')';
},
},
{
title: l("Permissions"),
data: 'permissions',
render: function (data, type, row) {
var spans = '';
for (var i = 0; i < row.permissions.length; i++) {
spans += '<span class="d-inline-block bg-light rounded-pill px-2 me-1 mb-1">' + row.permissions[i].name + '</span>';
}
return spans;
},
}
]
);
},
0 //adds as the first contributor
);
abp.modals = abp.modals || {};
abp.modals.ResourcePermissionManagement = function () {
var initModal = function (publicApi, args) {
_dataTable = $('#resourcePermissionTable').DataTable(
abp.libs.datatables.normalizeConfiguration({
order: [],
searching: false,
processing: true,
scrollX: true,
serverSide: true,
paging: true,
ajax: function () {
return function (requestData, callback, settings) {
if (callback) {
volo.abp.permissionManagement.permissions.getResource(args.resourceName, args.resourceKey).then(function (result) {
callback({
recordsTotal: result.permissions.length,
recordsFiltered: result.permissions.length,
data: result.permissions
});
});
}
}
}(),
columnDefs: abp.ui.extensions.tableColumns.get('permissionManagement.resource').columns.toArray(),
})
);
$("#addPermission").click(function () {
var _addResourcePermissionsModal = new abp.ModalManager(abp.appPath + "AbpPermissionManagement/AddResourcePermissionManagementModal");
_addResourcePermissionsModal.open({
resourceName: $("#ResourceName").val(),
resourceKey: $("#ResourceKey").val(),
resourceDisplayName: $("#ResourceDisplayName").val()
});
_addResourcePermissionsModal.onResult(function () {
_dataTable.ajax.reloadEx();
});
});
};
return {
initModal: initModal,
};
};
})(jQuery);

11
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/update-resource-permission-management-modal.js

@ -0,0 +1,11 @@
var abp = abp || {};
(function ($) {
var $all = $("#grantAllresourcePermissions");
var $items = $("#permissionList input[type='checkbox']").not("#grantAllresourcePermissions");
$all.on("change", function () {
$items.prop("checked", this.checked);
});
$items.on("change", function () {
$all.prop("checked", $items.length === $items.filter(":checked").length);
});
})(jQuery);

38
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/wwwroot/client-proxies/permissionManagement-proxy.js

@ -34,6 +34,44 @@
}, ajaxParams));
};
volo.abp.permissionManagement.permissions.getResourceDefinitions = function(resourceName, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/permission-management/permissions/resource-definitions' + abp.utils.buildQueryString([{ name: 'resourceName', value: resourceName }]) + '',
type: 'GET'
}, ajaxParams));
};
volo.abp.permissionManagement.permissions.getResource = function(resourceName, resourceKey, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/permission-management/permissions/resource' + abp.utils.buildQueryString([{ name: 'resourceName', value: resourceName }, { name: 'resourceKey', value: resourceKey }]) + '',
type: 'GET'
}, ajaxParams));
};
volo.abp.permissionManagement.permissions.getResourceByProvider = function(resourceName, resourceKey, providerName, providerKey, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/permission-management/permissions/resource/by-provider' + abp.utils.buildQueryString([{ name: 'resourceName', value: resourceName }, { name: 'resourceKey', value: resourceKey }, { name: 'providerName', value: providerName }, { name: 'providerKey', value: providerKey }]) + '',
type: 'GET'
}, ajaxParams));
};
volo.abp.permissionManagement.permissions.updateResource = function(resourceName, resourceKey, input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/permission-management/permissions/resource' + abp.utils.buildQueryString([{ name: 'resourceName', value: resourceName }, { name: 'resourceKey', value: resourceKey }]) + '',
type: 'PUT',
dataType: null,
data: JSON.stringify(input)
}, ajaxParams));
};
volo.abp.permissionManagement.permissions.deleteResource = function(resourceName, resourceKey, providerName, providerKey, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/permission-management/permissions/resource' + abp.utils.buildQueryString([{ name: 'resourceName', value: resourceName }, { name: 'resourceKey', value: resourceKey }, { name: 'providerName', value: providerName }, { name: 'providerKey', value: providerKey }]) + '',
type: 'DELETE',
dataType: null
}, ajaxParams));
};
})();
})();

Loading…
Cancel
Save