Reputation: 6175
I'm trying to define a Blazor website that has complete navigation to present the application for non-authenticated users and another completely different navigation for authenticated users.
The idea is that non-authenticated users get to a part of the website that allows anonymous users, with a complete set of pages and navigation. Once they log in, they get to another part of the website which is only for authenticated users with its own navigation.
In addition, I might have two different sets of navigation based on the roles of the users.
For example, an admin might have other views and menus than a standard user.
I have looked at the Routing and navigation documentation, but can't find anything that would allow me to redirect the user based on its authentication state or role to another sub-route with its own MainLayout, etc.
Upvotes: 1
Views: 1530
Reputation: 2032
App.razor:
<CascadingAuthenticationState>
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData"
DefaultLayout="@typeof(MainLayout)" />
</Found>
<NotFound>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</NotFound>
</Router>
</CascadingAuthenticationState>
NavMenu.razor
<AuthorizeView>
<Authorized>
@* For authorized users *@
<nav>...</nav>
</Authorized>
<NotAuthorized>
@* For unauthorized users *@
<nav>...</nav>
</NotAuthorized>
</AuthorizeView>
Don't forget to add in Startup or program file this two lines.
app.UseAuthentication();
app.UseAuthorization();
Upvotes: 1
Reputation: 754
Take a look at this code:
[Inject]
public NavigationManager Navigator { get; set; }
[Inject]
private IHttpContextAccessor HttpContextAccessor { get; set; }
public void DoSomething()
{
if (HttpContextAccessor.HttpContext.User.Identity.IsAuthenticated)
{
Navigator.NavigateTo("/SecretPage");
}
else
{
Navigator.NavigateTo("/PublicPage");
}
}
Don't forget to add this to your startup file:
services.AddHttpContextAccessor();
That will make sure IHttpContextAccessor can be injected.
NaviationManager does not need to be manually injected.
Upvotes: 0