Browse Source

Add filter to Blazor UI permission modal

pull/21122/head
liangshiwei 2 years ago
parent
commit
34d3039475
  1. 149
      modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor
  2. 81
      modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs
  3. 31
      modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.css

149
modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor

@ -1,6 +1,4 @@
@using Microsoft.Extensions.Localization @inherits Volo.Abp.AspNetCore.Components.AbpComponentBase
@using Volo.Abp.PermissionManagement.Localization
@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase
<Modal @ref="_modal" Closing="@ClosingModal"> <Modal @ref="_modal" Closing="@ClosingModal">
<ModalContent Size="ModalSize.Large" Centered="true"> <ModalContent Size="ModalSize.Large" Centered="true">
<ModalHeader> <ModalHeader>
@ -8,74 +6,95 @@
<CloseButton Clicked="CloseModal" /> <CloseButton Clicked="CloseModal" />
</ModalHeader> </ModalHeader>
<ModalBody MaxHeight="50"> <ModalBody MaxHeight="50">
<Row Class="row d-flex align-items-center mb-2">
<Column>
<Field Class="mb-2">
<Addons>
<Addon AddonType="AddonType.Start">
<span class="input-group-text">
<Icon Name="IconName.Search"/>
</span>
</Addon>
<Addon AddonType="AddonType.Body">
<TextEdit Text="@_permissionGroupSearchText" TextChanged="OnPermissionGroupSearchTextChangedAsync"/>
</Addon>
</Addons>
</Field>
</Column>
<Column ColumnSize="ColumnSize.IsAuto">
<Field>
<Check Disabled="_selectAllDisabled" Cursor="Cursor.Pointer" @bind-Checked="@GrantAll" TValue="bool">
@L["SelectAllInAllTabs"]
</Check>
</Field>
</Column>
</Row>
<Field> <fieldset class="border rounded-4 p-3">
<Check Disabled="_selectAllDisabled" Cursor="Cursor.Pointer" @bind-Checked="@GrantAll" TValue="bool"> <legend class="px-1 h5 mb-0">@L["PermissionGroup"]</legend>
@L["SelectAllInAllTabs"]
</Check> @if (_groups != null && _groups.Any())
</Field> {
<Tabs @key="_groups" TabPosition="TabPosition.Start" Pills="true" SelectedTab="@_selectedTabName" SelectedTabChanged="@OnSelectedTabChangedAsync">
<Divider /> <Items>
@foreach (var group in _groups)
@if (_groups != null)
{
<Tabs TabPosition="TabPosition.Start" Pills="true" @bind-SelectedTab="@_selectedTabName">
<Items>
@foreach (var group in _groups)
{
<Tab Name="@GetNormalizedGroupName(group.Name)">
@if (group.Permissions.Any(x => x.IsGranted))
{ {
<span> <Tab Name="@GetNormalizedGroupName(group.Name)">
<b>@group.DisplayName ( @(group.Permissions.Count(x => x.IsGranted)) )</b> @if (group.Permissions.Any(x => x.IsGranted))
</span> {
<span>
<b>@group.DisplayName ( @(group.Permissions.Count(x => x.IsGranted)) )</b>
</span>
}
else
{
<span>
@group.DisplayName ( @(group.Permissions.Count(x => x.IsGranted)) )
</span>
}
</Tab>
} }
else </Items>
<Content>
@foreach (var group in _groups)
{ {
<span> <TabPanel Name="@GetNormalizedGroupName(group.Name)">
@group.DisplayName ( @(group.Permissions.Count(x => x.IsGranted)) )
</span> <Field>
} <Check
</Tab> Disabled="@(IsPermissionGroupDisabled(group))"
} Checked="@(group.Permissions.All(x => x.IsGranted))"
</Items> Cursor="Cursor.Pointer"
<Content> CheckedChanged="@(b => GroupGrantAllChanged(b, group))"
@foreach (var group in _groups) TValue="bool">
{ @L["SelectAllInThisTab"]
<TabPanel Name="@GetNormalizedGroupName(group.Name)"> </Check>
</Field>
<Field>
<Check
Disabled="@(IsPermissionGroupDisabled(group))"
Checked="@(group.Permissions.All(x => x.IsGranted))"
Cursor="Cursor.Pointer"
CheckedChanged="@(b => GroupGrantAllChanged(b, group))"
TValue="bool">
@L["SelectAllInThisTab"]
</Check>
</Field>
<Divider /> <Divider />
@foreach (var permission in group.Permissions) @foreach (var permission in group.Permissions)
{ {
<Field Style="@($"margin-inline-start: {GetPermissionDepthOrDefault(permission.Name) * 20}px")"> <Field Style="@($"margin-inline-start: {GetPermissionDepthOrDefault(permission.Name) * 20}px")">
<Check <Check
Disabled="@(IsDisabledPermission(permission))" Disabled="@(IsDisabledPermission(permission))"
Cursor="Cursor.Pointer" Cursor="Cursor.Pointer"
Checked="@permission.IsGranted" Checked="@permission.IsGranted"
CheckedChanged="@(b => PermissionChanged(b, group, permission))" CheckedChanged="@(b => PermissionChanged(b, group, permission))"
TValue="bool"> TValue="bool">
@GetShownName(permission) @GetShownName(permission)
</Check> </Check>
</Field> </Field>
}
</TabPanel>
} }
</Content>
</TabPanel> </Tabs>
} }
</Content>
</Tabs> </fieldset>
}
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button Color="Color.Primary" Outline Clicked="CloseModal">@L["Cancel"]</Button> <Button Color="Color.Primary" Outline Clicked="CloseModal">@L["Cancel"]</Button>

81
modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs

@ -24,6 +24,7 @@ public partial class PermissionManagementModal
protected string _providerKey; protected string _providerKey;
protected string _entityDisplayName; protected string _entityDisplayName;
protected List<PermissionGroupDto> _allGroups;
protected List<PermissionGroupDto> _groups; protected List<PermissionGroupDto> _groups;
protected List<PermissionGrantInfoDto> _disabledPermissions = new List<PermissionGrantInfoDto>(); protected List<PermissionGrantInfoDto> _disabledPermissions = new List<PermissionGrantInfoDto>();
@ -34,6 +35,8 @@ public partial class PermissionManagementModal
protected int _notGrantedPermissionCount = 0; protected int _notGrantedPermissionCount = 0;
protected bool _selectAllDisabled; protected bool _selectAllDisabled;
protected string _permissionGroupSearchText;
protected bool GrantAll { protected bool GrantAll {
get { get {
@ -85,35 +88,15 @@ public partial class PermissionManagementModal
{ {
_providerName = providerName; _providerName = providerName;
_providerKey = providerKey; _providerKey = providerKey;
_permissionGroupSearchText = null;
var result = await PermissionAppService.GetAsync(_providerName, _providerKey); var result = await PermissionAppService.GetAsync(_providerName, _providerKey);
_entityDisplayName = entityDisplayName ?? result.EntityDisplayName; _entityDisplayName = entityDisplayName ?? result.EntityDisplayName;
_groups = result.Groups; _allGroups = result.Groups;
_groups = _allGroups;
_selectAllDisabled = _groups.All(IsPermissionGroupDisabled); NormalizePermissionGroup();
_grantedPermissionCount = 0;
_notGrantedPermissionCount = 0;
foreach (var permission in _groups.SelectMany(x => x.Permissions))
{
if (permission.IsGranted && permission.GrantedProviders.All(x => x.ProviderName != _providerName))
{
_disabledPermissions.Add(permission);
continue;
}
if (permission.IsGranted)
{
_grantedPermissionCount++;
}
else
{
_notGrantedPermissionCount++;
}
}
_selectedTabName = GetNormalizedGroupName(_groups.First().Name);
foreach (var group in _groups) foreach (var group in _groups)
{ {
@ -127,6 +110,34 @@ public partial class PermissionManagementModal
await HandleErrorAsync(ex); await HandleErrorAsync(ex);
} }
} }
protected void NormalizePermissionGroup()
{
_selectAllDisabled = _groups.All(IsPermissionGroupDisabled);
_grantedPermissionCount = 0;
_notGrantedPermissionCount = 0;
_disabledPermissions.Clear();
foreach (var permission in _groups.SelectMany(x => x.Permissions))
{
if (permission.IsGranted && permission.GrantedProviders.All(x => x.ProviderName != _providerName))
{
_disabledPermissions.Add(permission);
continue;
}
if (permission.IsGranted)
{
_grantedPermissionCount++;
}
else
{
_notGrantedPermissionCount++;
}
}
_selectedTabName = GetNormalizedGroupName(_groups.First().Name);
}
protected Task CloseModal() protected Task CloseModal()
{ {
@ -317,4 +328,26 @@ public partial class PermissionManagementModal
return permissions.All(x => x.IsGranted) && grantedProviders.Any(p => p.ProviderName != _providerName); return permissions.All(x => x.IsGranted) && grantedProviders.Any(p => p.ProviderName != _providerName);
} }
protected virtual async Task OnPermissionGroupSearchTextChangedAsync(string value)
{
if (value == _permissionGroupSearchText)
{
return;
}
_permissionGroupSearchText = value;
_groups = _permissionGroupSearchText.IsNullOrWhiteSpace() ? _allGroups : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase)).ToList();
NormalizePermissionGroup();
await InvokeAsync(StateHasChanged);
}
protected virtual Task OnSelectedTabChangedAsync(string name)
{
_selectedTabName = name;
return Task.CompletedTask;
}
} }

31
modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.css

@ -0,0 +1,31 @@
fieldset legend {
float: none;
width: auto;
}
.lpx-scroll-pills-container ul {
display: block;
max-height: 500px;
overflow-y: auto;
}
.lpx-scroll-pills-container .tab-content {
padding-top: 0 !important;
padding-bottom: 0 !important;
}
.lpx-scroll-pills-container ul li {
border: 1px solid #e8eef3;
margin-bottom: 10px;
border-radius: 10px;
}
.lpx-scroll-pills-container ul li a.active {
color: #fff !important;
border-color: #6c5dd3 !important;
background-color: #6c5dd3 !important;
}
.lpx-theme-dark .lpx-scroll-pills-container ul li {
border: 1px solid #23262a;
}
Loading…
Cancel
Save