From cd39b3e153865b1a4a641bf39732e284636301a4 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 13 Feb 2025 15:35:23 +0800 Subject: [PATCH 1/2] Refactor permission management logic to fix 'Grant all permissions' problem --- .../PermissionManagementModal.razor | 2 +- .../PermissionManagementModal.razor.cs | 71 +++++++++---------- 2 files changed, 35 insertions(+), 38 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor index 2d89ff866d..fc9884bf4e 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor @@ -24,7 +24,7 @@ - + @L["SelectAllInAllTabs"] diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index b2c998eb4f..0680ac9390 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -38,43 +38,7 @@ public partial class PermissionManagementModal protected string _permissionGroupSearchText; - protected bool GrantAll { - get { - if (_notGrantedPermissionCount == 0) - { - return true; - } - - return false; - } - set { - if (_groups == null) - { - return; - } - - _grantedPermissionCount = 0; - _notGrantedPermissionCount = 0; - Task.Run(()=>OnPermissionGroupSearchTextChangedAsync(null)); - - foreach (var permission in _allGroups.SelectMany(x => x.Permissions)) - { - if (!IsDisabledPermission(permission)) - { - permission.IsGranted = value; - - if (value) - { - _grantedPermissionCount++; - } - else - { - _notGrantedPermissionCount++; - } - } - } - } - } + protected bool GrantAll { get; set; } protected Dictionary _permissionDepths = new Dictionary(); @@ -98,6 +62,8 @@ public partial class PermissionManagementModal _groups = _allGroups.ToList(); NormalizePermissionGroup(); + + GrantAll = _notGrantedPermissionCount == 0; await InvokeAsync(_modal.Show); } @@ -106,6 +72,37 @@ public partial class PermissionManagementModal await HandleErrorAsync(ex); } } + + protected virtual async Task GrantAllAsync(bool grantAll) + { + GrantAll = grantAll; + + if (_allGroups == null) + { + return; + } + _grantedPermissionCount = 0; + _notGrantedPermissionCount = 0; + + await OnPermissionGroupSearchTextChangedAsync(string.Empty); + + foreach (var permission in _allGroups.SelectMany(x => x.Permissions)) + { + if (!IsDisabledPermission(permission)) + { + permission.IsGranted = grantAll; + + if (grantAll) + { + _grantedPermissionCount++; + } + else + { + _notGrantedPermissionCount++; + } + } + } + } protected void NormalizePermissionGroup() { From cf51ce5d47b9a64c98683c7e9970f83a172c01c8 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Fri, 14 Feb 2025 10:32:22 +0800 Subject: [PATCH 2/2] Improve --- .../PermissionManagementModal.razor.cs | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index 0680ac9390..d2c2e092d5 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -81,39 +81,48 @@ public partial class PermissionManagementModal { return; } + _grantedPermissionCount = 0; _notGrantedPermissionCount = 0; await OnPermissionGroupSearchTextChangedAsync(string.Empty); - + foreach (var permission in _allGroups.SelectMany(x => x.Permissions)) { - if (!IsDisabledPermission(permission)) + if (IsDisabledPermission(permission)) { - permission.IsGranted = grantAll; + continue; + } - if (grantAll) - { - _grantedPermissionCount++; - } - else - { - _notGrantedPermissionCount++; - } + permission.IsGranted = grantAll; + + if (grantAll) + { + _grantedPermissionCount++; + } + else + { + _notGrantedPermissionCount++; } } + + await InvokeAsync(StateHasChanged); } - protected void NormalizePermissionGroup() + protected virtual void NormalizePermissionGroup(bool checkDisabledPermissions = true) { _selectAllDisabled = _groups.All(IsPermissionGroupDisabled); _grantedPermissionCount = 0; _notGrantedPermissionCount = 0; - _disabledPermissions.Clear(); + if (checkDisabledPermissions) + { + _disabledPermissions.Clear(); + } + foreach (var permission in _groups.SelectMany(x => x.Permissions)) { - if (permission.IsGranted && permission.GrantedProviders.All(x => x.ProviderName != _providerName)) + if (checkDisabledPermissions && permission.IsGranted && permission.GrantedProviders.All(x => x.ProviderName != _providerName)) { _disabledPermissions.Add(permission); continue; @@ -266,19 +275,19 @@ public partial class PermissionManagementModal permission.IsGranted = value; } - protected PermissionGrantInfoDto GetParentPermission(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) + protected virtual PermissionGrantInfoDto GetParentPermission(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) { return permissionGroup.Permissions.First(x => x.Name == permission.ParentName); } - protected List GetChildPermissions(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) + protected virtual List GetChildPermissions(PermissionGroupDto permissionGroup, PermissionGrantInfoDto permission) { var childPermissions = new List(); GetChildPermissions(childPermissions, permissionGroup.Permissions, permission); return childPermissions; } - protected void GetChildPermissions(List allChildPermissions, List permissions, PermissionGrantInfoDto permission) + protected virtual void GetChildPermissions(List allChildPermissions, List permissions, PermissionGrantInfoDto permission) { var childPermissions = permissions.Where(x => x.ParentName == permission.Name).ToList(); if (childPermissions.Count == 0) @@ -294,7 +303,7 @@ public partial class PermissionManagementModal } } - protected bool IsDisabledPermission(PermissionGrantInfoDto permissionGrantInfo) + protected virtual bool IsDisabledPermission(PermissionGrantInfoDto permissionGrantInfo) { return _disabledPermissions.Any(x => x == permissionGrantInfo); } @@ -338,9 +347,9 @@ public partial class PermissionManagementModal } _permissionGroupSearchText = value; - _groups = _permissionGroupSearchText.IsNullOrWhiteSpace() ? _allGroups : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase) || x.Permissions.Any(permission => permission.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase))).ToList(); + _groups = _permissionGroupSearchText.IsNullOrWhiteSpace() ? _allGroups.ToList() : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase) || x.Permissions.Any(permission => permission.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase))).ToList(); - NormalizePermissionGroup(); + NormalizePermissionGroup(false); await InvokeAsync(StateHasChanged); }