Browse Source

Fix MudBlazor resource permission management modal

- Close nested add/edit dialogs via Visible binding instead of @if
- Use Large dialog width to match the permission management modal
- Localize the provider key search label
- Bind the target radio group with Value/ValueChanged so the lookup service updates
- Sync the grant-all switch with permission checkboxes
pull/25692/head
maliming 3 months ago
parent
commit
09cdbd4f6c
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 136
      modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor
  2. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor.cs

136
modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor

@ -1,7 +1,7 @@
@using global::MudBlazor @using global::MudBlazor
@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase @inherits Volo.Abp.AspNetCore.Components.AbpComponentBase
<MudDialog DefaultFocus="DefaultFocus.FirstChild" @bind-Visible="@_isVisible" Options="@(new DialogOptions { MaxWidth = MaxWidth.ExtraLarge, FullWidth = true, CloseOnEscapeKey = true, BackdropClick = false })"> <MudDialog DefaultFocus="DefaultFocus.FirstChild" @bind-Visible="@_isVisible" Options="@(new DialogOptions { MaxWidth = MaxWidth.Large, FullWidth = true, CloseOnEscapeKey = true, BackdropClick = false })">
<TitleContent> <TitleContent>
<MudText Typo="Typo.h6">@L["ResourcePermissions"] - @ResourceDisplayName</MudText> <MudText Typo="Typo.h6">@L["ResourcePermissions"] - @ResourceDisplayName</MudText>
</TitleContent> </TitleContent>
@ -80,75 +80,69 @@
</MudDialog> </MudDialog>
@* Create Resource Permission Dialog *@ @* Create Resource Permission Dialog *@
@if (_createDialogVisible) <MudDialog DefaultFocus="DefaultFocus.FirstChild" @bind-Visible="@_createDialogVisible" Options="@(new DialogOptions { MaxWidth = MaxWidth.Medium, FullWidth = true, CloseOnEscapeKey = true, BackdropClick = false })">
{ <TitleContent>
<MudDialog DefaultFocus="DefaultFocus.FirstChild" @bind-Visible="@_createDialogVisible" Options="@(new DialogOptions { MaxWidth = MaxWidth.Medium, FullWidth = true, CloseOnEscapeKey = true, BackdropClick = false })"> <MudText Typo="Typo.h6">@L["AddResourcePermission"]</MudText>
<TitleContent> </TitleContent>
<MudText Typo="Typo.h6">@L["AddResourcePermission"]</MudText> <DialogContent>
</TitleContent> <MudForm @ref="@_createFormRef" Model="@CreateEntity">
<DialogContent> <MudText Typo="Typo.subtitle1" Class="mb-2">@L["ResourcePermissionTarget"]</MudText>
<MudForm @ref="@_createFormRef" Model="@CreateEntity"> <MudRadioGroup T="string" Value="@CurrentLookupService" ValueChanged="@OnLookupServiceCheckedValueChanged">
<MudText Typo="Typo.subtitle1" Class="mb-2">@L["ResourcePermissionTarget"]</MudText> @foreach (var keyLookupService in ResourceProviderKeyLookupServices)
<MudRadioGroup T="string" SelectedOption="@CurrentLookupService" SelectedOptionChanged="@OnLookupServiceCheckedValueChanged"> {
@foreach (var keyLookupService in ResourceProviderKeyLookupServices) <MudRadio Color="Color.Primary" T="string" Value="@keyLookupService.Name">@keyLookupService.DisplayName</MudRadio>
{ }
<MudRadio Color="Color.Primary" T="string" Option="@keyLookupService.Name">@keyLookupService.DisplayName</MudRadio> </MudRadioGroup>
} <MudAutocomplete Margin="Margin.Dense" T="SearchProviderKeyInfo"
</MudRadioGroup> Value="@_selectedProviderKey"
<MudAutocomplete Margin="Margin.Dense" T="SearchProviderKeyInfo" ValueChanged="@SelectedProviderKeyChanged"
Value="@_selectedProviderKey" SearchFunc="@SearchProviderKeyAsync"
ValueChanged="@SelectedProviderKeyChanged" ToStringFunc="@(item => item?.ProviderDisplayName ?? string.Empty)"
SearchFunc="@SearchProviderKeyAsync" Label="@L["SearchProviderKey"]"
ToStringFunc="@(item => item?.ProviderDisplayName ?? string.Empty)" Required="true"
Label="@L["ProviderKey"]" RequiredError="@L["ThisFieldIsRequired."]"
Required="true" Class="mt-2" />
RequiredError="@L["ThisFieldIsRequired."]" <MudText Typo="Typo.subtitle1" Class="mb-2 mt-4">@L["ResourcePermissionPermissions"]</MudText>
Class="mt-2" /> <MudSwitch Color="Color.Primary" T="bool" Value="@CreateEntity.Permissions.All(x => x.IsGranted)"
<MudText Typo="Typo.subtitle1" Class="mb-2 mt-4">@L["ResourcePermissionPermissions"]</MudText> ValueChanged="@(async (bool b) => await GrantAllCreateAsync(b))"
<MudSwitch Color="Color.Primary" T="bool" Value="@_grantAllCreate" Label="@L["GrantAllResourcePermissions"]" />
ValueChanged="@(async (bool b) => await GrantAllCreateAsync(b))" <div class="mt-2">
Label="@L["GrantAllResourcePermissions"]" /> @foreach (var permission in CreateEntity.Permissions)
<div class="mt-2"> {
@foreach (var permission in CreateEntity.Permissions) <MudCheckBox Color="Color.Primary" UncheckedColor="Color.Default" T="bool" @bind-Value="@permission.IsGranted"
{ Label="@permission.DisplayName" />
<MudCheckBox Color="Color.Primary" UncheckedColor="Color.Default" T="bool" @bind-Value="@permission.IsGranted" }
Label="@permission.DisplayName" /> </div>
} </MudForm>
</div> </DialogContent>
</MudForm> <DialogActions>
</DialogContent> <MudButton OnClick="@CloseCreateDialogAsync">@L["Cancel"]</MudButton>
<DialogActions> <MudButton Color="Color.Primary" Variant="Variant.Filled" OnClick="@CreateResourcePermissionAsync">@L["Save"]</MudButton>
<MudButton OnClick="@CloseCreateDialogAsync">@L["Cancel"]</MudButton> </DialogActions>
<MudButton Color="Color.Primary" Variant="Variant.Filled" OnClick="@CreateResourcePermissionAsync">@L["Save"]</MudButton> </MudDialog>
</DialogActions>
</MudDialog>
}
@* Edit Resource Permission Dialog *@ @* Edit Resource Permission Dialog *@
@if (_editDialogVisible) <MudDialog DefaultFocus="DefaultFocus.FirstChild" @bind-Visible="@_editDialogVisible" Options="@(new DialogOptions { MaxWidth = MaxWidth.Medium, FullWidth = true, CloseOnEscapeKey = true, BackdropClick = false })">
{ <TitleContent>
<MudDialog DefaultFocus="DefaultFocus.FirstChild" @bind-Visible="@_editDialogVisible" Options="@(new DialogOptions { MaxWidth = MaxWidth.Medium, FullWidth = true, CloseOnEscapeKey = true, BackdropClick = false })"> <MudText Typo="Typo.h6">@L["UpdateResourcePermission"]</MudText>
<TitleContent> </TitleContent>
<MudText Typo="Typo.h6">@L["UpdateResourcePermission"]</MudText> <DialogContent>
</TitleContent> <MudForm @ref="@_editFormRef" Model="@EditEntity">
<DialogContent> <MudText Typo="Typo.subtitle1" Class="mb-2">@L["ResourcePermissionPermissions"]</MudText>
<MudForm @ref="@_editFormRef" Model="@EditEntity"> <MudSwitch Color="Color.Primary" T="bool" Value="@EditEntity.Permissions.All(x => x.IsGranted)"
<MudText Typo="Typo.subtitle1" Class="mb-2">@L["ResourcePermissionPermissions"]</MudText> ValueChanged="@(async (bool b) => await GrantAllEditAsync(b))"
<MudSwitch Color="Color.Primary" T="bool" Value="@_grantAllEdit" Label="@L["GrantAllResourcePermissions"]" />
ValueChanged="@(async (bool b) => await GrantAllEditAsync(b))" <div class="mt-2">
Label="@L["GrantAllResourcePermissions"]" /> @foreach (var permission in EditEntity.Permissions)
<div class="mt-2"> {
@foreach (var permission in EditEntity.Permissions) <MudCheckBox Color="Color.Primary" UncheckedColor="Color.Default" T="bool" @bind-Value="@permission.IsGranted"
{ Label="@permission.DisplayName" />
<MudCheckBox Color="Color.Primary" UncheckedColor="Color.Default" T="bool" @bind-Value="@permission.IsGranted" }
Label="@permission.DisplayName" /> </div>
} </MudForm>
</div> </DialogContent>
</MudForm> <DialogActions>
</DialogContent> <MudButton OnClick="@CloseEditDialogAsync">@L["Cancel"]</MudButton>
<DialogActions> <MudButton Color="Color.Primary" Variant="Variant.Filled" OnClick="@UpdateResourcePermissionAsync">@L["Save"]</MudButton>
<MudButton OnClick="@CloseEditDialogAsync">@L["Cancel"]</MudButton> </DialogActions>
<MudButton Color="Color.Primary" Variant="Variant.Filled" OnClick="@UpdateResourcePermissionAsync">@L["Save"]</MudButton> </MudDialog>
</DialogActions>
</MudDialog>
}

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor.cs

@ -59,8 +59,6 @@ public partial class ResourcePermissionManagementModal
Permissions = new List<ResourcePermissionModel>() Permissions = new List<ResourcePermissionModel>()
}; };
protected bool _grantAllCreate;
protected bool _grantAllEdit;
public ResourcePermissionManagementModal() public ResourcePermissionManagementModal()
{ {
@ -124,7 +122,6 @@ public partial class ResourcePermissionManagementModal
}).ToList() }).ToList()
}; };
_grantAllCreate = false;
_createDialogVisible = true; _createDialogVisible = true;
await InvokeAsync(StateHasChanged); await InvokeAsync(StateHasChanged);
} }
@ -140,8 +137,6 @@ public partial class ResourcePermissionManagementModal
{ {
permission.IsGranted = permissionGrants.Permissions.Any(p => p.Name == permission.Name && p.Providers.Contains(CurrentLookupService) && p.IsGranted); permission.IsGranted = permissionGrants.Permissions.Any(p => p.Name == permission.Name && p.Providers.Contains(CurrentLookupService) && p.IsGranted);
} }
_grantAllCreate = CreateEntity.Permissions.All(x => x.IsGranted);
} }
await InvokeAsync(StateHasChanged); await InvokeAsync(StateHasChanged);
@ -162,7 +157,6 @@ public partial class ResourcePermissionManagementModal
protected virtual async Task GrantAllCreateAsync(bool value) protected virtual async Task GrantAllCreateAsync(bool value)
{ {
_grantAllCreate = value;
foreach (var permission in CreateEntity.Permissions) foreach (var permission in CreateEntity.Permissions)
{ {
permission.IsGranted = value; permission.IsGranted = value;
@ -172,7 +166,6 @@ public partial class ResourcePermissionManagementModal
protected virtual async Task GrantAllEditAsync(bool value) protected virtual async Task GrantAllEditAsync(bool value)
{ {
_grantAllEdit = value;
foreach (var permission in EditEntity.Permissions) foreach (var permission in EditEntity.Permissions)
{ {
permission.IsGranted = value; permission.IsGranted = value;
@ -195,7 +188,6 @@ public partial class ResourcePermissionManagementModal
}).ToList() }).ToList()
}; };
_grantAllEdit = EditEntity.Permissions.All(x => x.IsGranted);
_editDialogVisible = true; _editDialogVisible = true;
await InvokeAsync(StateHasChanged); await InvokeAsync(StateHasChanged);
} }

Loading…
Cancel
Save