implement optional Security parameter for TabPanel #797

This commit is contained in:
Shaun Walker 2020-11-04 17:27:15 -05:00
parent 5b49e1bc7c
commit d7135ad4f9
2 changed files with 47 additions and 14 deletions

View File

@ -27,6 +27,9 @@ else
[Parameter] [Parameter]
public string Heading { get; set; } // optional - defaults to name if not specified public string Heading { get; set; } // optional - defaults to name if not specified
[Parameter]
public SecurityAccessLevel? Security { get; set; } // optional - can be used to specify SecurityAccessLevel
protected override void OnInitialized() protected override void OnInitialized()
{ {
base.OnInitialized(); base.OnInitialized();

View File

@ -7,20 +7,23 @@
<ul class="nav nav-tabs" role="tablist"> <ul class="nav nav-tabs" role="tablist">
@foreach (TabPanel tabPanel in _tabPanels) @foreach (TabPanel tabPanel in _tabPanels)
{ {
<li class="nav-item"> @if (IsAuthorized(tabPanel))
@if (tabPanel.Name == ActiveTab) {
{ <li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#@tabPanel.Name" role="tab" @onclick:preventDefault="true"> @if (tabPanel.Name == ActiveTab)
@tabPanel.DisplayHeading() {
</a> <a class="nav-link active" data-toggle="tab" href="#@tabPanel.Name" role="tab" @onclick:preventDefault="true">
} @tabPanel.DisplayHeading()
else </a>
{ }
<a class="nav-link" data-toggle="tab" href="#@tabPanel.Name" role="tab" @onclick:preventDefault="true"> else
@tabPanel.DisplayHeading() {
</a> <a class="nav-link" data-toggle="tab" href="#@tabPanel.Name" role="tab" @onclick:preventDefault="true">
} @tabPanel.DisplayHeading()
</li> </a>
}
</li>
}
} }
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
@ -57,4 +60,31 @@
} }
StateHasChanged(); StateHasChanged();
} }
private bool IsAuthorized(TabPanel tabPanel)
{
var authorized = false;
switch (tabPanel.Security)
{
case null: // security not specified - assume SecurityAccessLevel.Anonymous
authorized = true;
break;
case SecurityAccessLevel.Anonymous:
authorized = true;
break;
case SecurityAccessLevel.View:
authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, ModuleState.Permissions);
break;
case SecurityAccessLevel.Edit:
authorized = UserSecurity.IsAuthorized(PageState.User, PermissionNames.Edit, ModuleState.Permissions);
break;
case SecurityAccessLevel.Admin:
authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin);
break;
case SecurityAccessLevel.Host:
authorized = UserSecurity.IsAuthorized(PageState.User, RoleNames.Host);
break;
}
return authorized;
}
} }