Skip to content

Commit c9653f5

Browse files
authored
feat(Layout): add SkipAuthenticate parameter (#6640)
* refactor: 更改变量名 * feat: add SkipAuthenticate parmeter * test: add unit test
1 parent 302c23e commit c9653f5

File tree

3 files changed

+50
-29
lines changed

3 files changed

+50
-29
lines changed

src/BootstrapBlazor/Components/Layout/Layout.razor

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
@if (_init)
66
{
77
<CascadingValue Value="this" IsFixed="true">
8-
@if (IsAuthenticated)
8+
@if (_authenticated)
99
{
1010
<section @attributes="AdditionalAttributes" id="@Id" class="@ClassString" style="@StyleString">
1111
@if (Side == null)
@@ -126,16 +126,16 @@
126126
}
127127
else
128128
{
129-
<ErrorLogger EnableErrorLogger="@_enableErrorLogger" ShowToast="@_showToast" ToastTitle="@ErrorLoggerToastTitle"
130-
EnableILogger="@_enableILogger" OnErrorHandleAsync="OnErrorHandleAsync" OnInitializedCallback="OnErrorLoggerInitialized">
129+
<ErrorLogger EnableErrorLogger="@EnableLogger" ShowToast="@ShowToast" ToastTitle="@ErrorLoggerToastTitle"
130+
EnableILogger="@EnableILogger" OnErrorHandleAsync="OnErrorHandleAsync" OnInitializedCallback="OnErrorLoggerInitialized">
131131
@HandlerMain()
132132
</ErrorLogger>
133133
}
134134
</main>;
135135

136136
RenderFragment RenderTab =>
137137
@<Tab ClickTabToNavigation="ClickTabToNavigation" AdditionalAssemblies="@AdditionalAssemblies"
138-
ShowExtendButtons="ShowTabExtendButtons" ShowClose="ShowTabItemClose" AllowDrag="AllowDragTab"
138+
ShowExtendButtons="ShowTabExtendButtons" ShowClose="ShowTabItemClose" AllowDrag="AllowDragTab"
139139
DefaultUrl="@TabDefaultUrl" ExcludeUrls="@ExcludeUrls" IsOnlyRenderActiveTab="IsOnlyRenderActiveTab"
140140
TabStyle="TabStyle" ShowToolbar="@ShowToolbar" ToolbarTemplate="@ToolbarTemplate"
141141
ShowContextMenu="ShowTabContextMenu"
@@ -148,7 +148,7 @@
148148
RefreshToolbarTooltipText="@RefreshToolbarTooltipText" FullscreenToolbarTooltipText="@FullscreenToolbarTooltipText"
149149
OnToolbarRefreshCallback="OnToolbarRefreshCallback" TabHeader="TabHeader"
150150
Body="@Main" NotAuthorized="NotAuthorized!" NotFound="NotFound!" NotFoundTabText="@NotFoundTabText"
151-
EnableErrorLogger="@_enableErrorLogger" ErrorLoggerToastTitle="@ErrorLoggerToastTitle">
151+
EnableErrorLogger="@EnableLogger" ErrorLoggerToastTitle="@ErrorLoggerToastTitle">
152152
</Tab>;
153153

154154
RenderFragment RenderFooter =>

src/BootstrapBlazor/Components/Layout/Layout.razor.cs

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,12 @@ public partial class Layout : IHandlerException, ITabHeader
361361
[Parameter]
362362
public bool ShowTabInHeader { get; set; }
363363

364+
/// <summary>
365+
/// 获得/设置 是否跳过认证逻辑 默认 false
366+
/// </summary>
367+
[Parameter]
368+
public bool SkipAuthenticate { get; set; }
369+
364370
[Inject]
365371
[NotNull]
366372
private NavigationManager? Navigation { get; set; }
@@ -374,7 +380,7 @@ public partial class Layout : IHandlerException, ITabHeader
374380
/// <summary>
375381
/// 获得/设置 是否已授权
376382
/// </summary>
377-
private bool IsAuthenticated { get; set; }
383+
private bool _authenticated;
378384

379385
/// <summary>
380386
/// 获得 组件样式
@@ -501,15 +507,15 @@ public partial class Layout : IHandlerException, ITabHeader
501507
private IOptionsMonitor<BootstrapBlazorOptions>? Options { get; set; }
502508

503509
private bool _init;
504-
private LayoutHeader? _layoutHeader = null;
510+
private LayoutHeader? _layoutHeader;
505511

506512
private ITabHeader? TabHeader => ShowTabInHeader ? this : null;
507513

508-
private bool _enableErrorLogger => EnableErrorLogger ?? Options.CurrentValue.EnableErrorLogger;
514+
private bool EnableLogger => EnableErrorLogger ?? Options.CurrentValue.EnableErrorLogger;
509515

510-
private bool _showToast => ShowErrorLoggerToast ?? Options.CurrentValue.ShowErrorLoggerToast;
516+
private bool ShowToast => ShowErrorLoggerToast ?? Options.CurrentValue.ShowErrorLoggerToast;
511517

512-
private bool _enableILogger => EnableErrorLoggerILogger ?? Options.CurrentValue.EnableErrorLoggerILogger;
518+
private bool EnableILogger => EnableErrorLoggerILogger ?? Options.CurrentValue.EnableErrorLoggerILogger;
513519

514520
/// <summary>
515521
/// <inheritdoc/>
@@ -535,30 +541,28 @@ protected override async Task OnInitializedAsync()
535541
{
536542
await base.OnInitializedAsync();
537543

538-
// 需要认证并且未认证
539-
if (AuthenticationStateTask != null)
544+
if (SkipAuthenticate || AuthenticationStateTask == null)
540545
{
541-
// wasm 模式下 开启权限必须提供 AdditionalAssemblies 参数
542-
AdditionalAssemblies ??= [Assembly.GetEntryAssembly()!];
546+
_authenticated = true;
547+
_init = true;
548+
return;
549+
}
543550

544-
var url = Navigation.ToBaseRelativePathWithoutQueryAndFragment();
545-
var context = RouteTableFactory.Create(AdditionalAssemblies, url);
546-
if (context.Handler != null)
547-
{
548-
IsAuthenticated = await context.Handler.IsAuthorizedAsync(ServiceProvider, AuthenticationStateTask, Resource);
551+
// wasm 模式下 开启权限必须提供 AdditionalAssemblies 参数
552+
AdditionalAssemblies ??= [Assembly.GetEntryAssembly()!];
549553

550-
// 检查当前 Url
551-
if (OnAuthorizing != null)
552-
{
553-
IsAuthenticated = IsAuthenticated && await OnAuthorizing(Navigation.Uri);
554-
}
555-
}
556-
}
557-
else
554+
var url = Navigation.ToBaseRelativePathWithoutQueryAndFragment();
555+
var context = RouteTableFactory.Create(AdditionalAssemblies, url);
556+
if (context.Handler != null)
558557
{
559-
IsAuthenticated = true;
560-
}
558+
_authenticated = await context.Handler.IsAuthorizedAsync(ServiceProvider, AuthenticationStateTask, Resource);
561559

560+
// 检查当前 Url
561+
if (OnAuthorizing != null)
562+
{
563+
_authenticated = _authenticated && await OnAuthorizing(Navigation.Uri);
564+
}
565+
}
562566
_init = true;
563567
}
564568

test/UnitTest/Components/LayoutTest.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,23 @@ public void CollapseBarTemplate_Ok()
673673
Assert.Contains("CollapseBarTemplate-Content", cut.Markup);
674674
}
675675

676+
677+
[Fact]
678+
public void SkipAuthenticate_Ok()
679+
{
680+
// 未授权,通过控制 SkipAuthenticate 属性跳过授权
681+
var cut = Context.RenderComponent<CascadingValue<Task<AuthenticationState>>>(pb =>
682+
{
683+
pb.Add(a => a.Value, Task.FromResult(new AuthenticationState(new ClaimsPrincipal())));
684+
pb.AddChildContent<Layout>(pb =>
685+
{
686+
pb.Add(a => a.SkipAuthenticate, true);
687+
pb.Add(a => a.Main, builder => builder.AddContent(0, "Main"));
688+
});
689+
});
690+
cut.MarkupMatches("<section id:ignore class=\"layout\" style=\"--bb-layout-header-height: 0px; --bb-layout-footer-height: 0px;\"><main class=\"layout-main\">Main</main></section>");
691+
}
692+
676693
private static RenderFragment CreateHeader(string? content = "Header") => builder => builder.AddContent(0, content);
677694

678695
private static RenderFragment CreateFooter(string? content = "Footer") => builder => builder.AddContent(0, content);

0 commit comments

Comments
 (0)