Browse Source

Merge pull request #20893 from abpframework/permission-management-modal-html

Permission management modal html
pull/20919/head
Alper Ebiçoğlu 2 years ago
committed by GitHub
parent
commit
17467de535
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 104
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml
  2. 35
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.css
  3. 52
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.js

104
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml

@ -11,48 +11,74 @@
Layout = null; Layout = null;
} }
<form method="post" asp-page="/AbpPermissionManagement/PermissionManagementModal" data-script-class="abp.modals.PermissionManagement" id="PermissionManagementForm"> <form method="post" asp-page="/AbpPermissionManagement/PermissionManagementModal"
data-script-class="abp.modals.PermissionManagement" id="PermissionManagementForm">
<abp-modal size="Large"> <abp-modal size="Large">
<abp-modal-header title="@(L["Permissions"].Value) - @(HttpUtility.HtmlEncode(Model.EntityDisplayName))"></abp-modal-header> <abp-modal-header
<abp-modal-body class="custom-scroll-container"> title="@(L["Permissions"].Value) - @(HttpUtility.HtmlEncode(Model.EntityDisplayName))"></abp-modal-header>
<abp-input asp-for="SelectAllInAllTabs" check-box-hidden-input-render-mode="CheckBoxHiddenInputRenderMode.None" label="@L["SelectAllInAllTabs"].Value" disabled="@Model.Groups.All(group => group.IsDisabled(Model.ProviderName))"/> <input asp-for="@Model.ProviderKey" />
<hr class="my-2"/> <input asp-for="@Model.ProviderName" />
<input asp-for="@Model.ProviderKey"/> <abp-modal-body class="">
<input asp-for="@Model.ProviderName"/> <div class="row d-flex align-items-center mb-2">
<abp-tabs name="PermissionsTabs" tab-style="PillVertical" vertical-header-size="_4" class="custom-scroll-container"> <div class="col">
@for (var i = 0; i < Model.Groups.Count; i++) <div class="input-group mb-2">
{ <span class="input-group-text" id="basic-addon1"><i class="bi bi-search"></i></span>
var group = Model.Groups[i]; <input type="text" class="form-control" id="permission-search" placeholder="Filter" aria-label="Username"
<abp-tab title="@group.DisplayName" name="v-pills-tab-@group.GetNormalizedGroupName()"> aria-describedby="basic-addon1" />
<div class="w-100" style="max-height: 640px;overflow-y: auto"> </div>
<div class="ps-1"> </div>
<abp-input asp-for="@group.IsAllPermissionsGranted" <div class="col-auto">
check-box-hidden-input-render-mode="CheckBoxHiddenInputRenderMode.None" <abp-input asp-for="SelectAllInAllTabs"
name="SelectAllInThisTab" check-box-hidden-input-render-mode="CheckBoxHiddenInputRenderMode.None"
id="SelectAllInThisTab-@group.GetNormalizedGroupName()" label="@L["SelectAllInAllTabs"].Value"
data-tab-id="v-pills-tab-@group.GetNormalizedGroupName()" disabled="@Model.Groups.All(group => group.IsDisabled(Model.ProviderName))" />
label="@L["SelectAllInThisTab"].Value" </div>
disabled="@group.IsDisabled(Model.ProviderName)" /> </div>
<hr class="mb-3"/> <fieldset class="border rounded-4 p-3">
@for (var j = 0; j < group.Permissions.Count; j++) <legend class="px-1 h5 mb-0">Permission Group</legend>
{
var permission = group.Permissions[j]; <abp-tabs name="PermissionsTabs" class="lpx-scroll-pills-container" tab-style="PillVertical"
<abp-input asp-for="@permission.IsGranted" vertical-header-size="_4">
check-box-hidden-input-render-mode="CheckBoxHiddenInputRenderMode.None" @for (var i = 0; i < Model.Groups.Count; i++)
abp-id-name="@Model.Groups[i].Permissions[j].IsGranted" {
label="@permission.GetShownName(Model.ProviderName)" var group = Model.Groups[i];
disabled="@permission.IsDisabled(Model.ProviderName)" <abp-tab title="@group.DisplayName" name="v-pills-tab-@group.GetNormalizedGroupName()">
group-data-permission-name="@permission.Name" <div class="w-100" style="height: 500px;overflow-y: auto">
group-data-parent-name="@(permission.ParentName ?? "")" <div class="ps-1">
group-style="margin-inline-start: @(permission.Depth * 20)px"/> <abp-input asp-for="@group.IsAllPermissionsGranted"
<input asp-for="@permission.Name" abp-id-name="@Model.Groups[i].Permissions[j].Name"/> check-box-hidden-input-render-mode="CheckBoxHiddenInputRenderMode.None"
} name="SelectAllInThisTab" id="SelectAllInThisTab-@group.GetNormalizedGroupName()"
data-tab-id="v-pills-tab-@group.GetNormalizedGroupName()"
label="@L["SelectAllInThisTab"].Value"
disabled="@group.IsDisabled(Model.ProviderName)" />
<hr class="mb-3" />
@for (var j = 0; j < group.Permissions.Count; j++)
{
var permission = group.Permissions[j];
<abp-input asp-for="@permission.IsGranted"
check-box-hidden-input-render-mode="CheckBoxHiddenInputRenderMode.None"
abp-id-name="@Model.Groups[i].Permissions[j].IsGranted"
label="@permission.GetShownName(Model.ProviderName)"
disabled="@permission.IsDisabled(Model.ProviderName)"
group-data-filter-text="@permission.GetShownName(Model.ProviderName)"
group-data-permission-name="@permission.Name"
group-data-parent-name="@(permission.ParentName ?? "")"
group-style="margin-inline-start: @(permission.Depth * 20)px" />
<input asp-for="@permission.Name" abp-id-name="@Model.Groups[i].Permissions[j].Name" />
}
</div>
</div> </div>
</div> </abp-tab>
</abp-tab> }
} </abp-tabs>
</abp-tabs> </fieldset>
</abp-modal-body> </abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer> <abp-modal-footer buttons="@(AbpModalButtons.Cancel|AbpModalButtons.Save)"></abp-modal-footer>
</abp-modal> </abp-modal>
</form> </form>

35
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/permission-management-modal.css

@ -1,12 +1,31 @@
.custom-scroll-container > .col-4 { fieldset legend {
overflow: hidden; float: none;
overflow-y: auto; width: auto;
max-height: 499px; }
.lpx-scroll-pills-container ul {
display: block; display: block;
position: relative; max-height: 500px;
z-index: 123; 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;
} }
.custom-scroll-content { .lpx-theme-dark .lpx-scroll-pills-container ul li {
max-height: 440px; border: 1px solid #23262a;
} }

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

@ -286,6 +286,58 @@ var abp = abp || {};
}); });
} }
$permissionSearchInput = $('#permission-search');
$permissionSearchInput.keyup(throttle(function() {
var searchTerm = $permissionSearchInput.val().toLowerCase();
filterTabs(searchTerm);
}, 300));
function filterTabs(searchTerm) {
var $tabs = $('#PermissionsTabs .nav-link');
$tabs.each(function(i) {
var $tabItem = $(this);
var $tab = $tabItem.parent();
if (!searchTerm) {
$tab.show();
return;
}
var tabName = $tabItem.find('small').text().toLowerCase();
var tabContentFilters = $($tabItem.attr('href')).find('[data-filter-text]');
let includedInTabContent = false;
tabContentFilters.each(function(i) {
var permissionName = $(this).attr('data-filter-text').toLowerCase();
includedInTabContent = permissionName.includes(searchTerm);
if (includedInTabContent === true) {
return false;
}
});
if(includedInTabContent || tabName.includes(searchTerm)) {
$tab.show();
} else {
$tab.hide();
}
});
}
function throttle(mainFunction, delay) {
let timerFlag = null; // Variable to keep track of the timer
// Returning a throttled version
return (...args) => {
if (timerFlag === null) { // If there is no timer currently running
mainFunction(...args); // Execute the main function
timerFlag = setTimeout(() => { // Set a timer to clear the timerFlag after the specified delay
timerFlag = null; // Clear the timerFlag to allow the main function to be executed again
}, delay);
}
};
}
}; };
}; };
})(jQuery); })(jQuery);

Loading…
Cancel
Save