【问题标题】:Kill execution of a blazorserver page终止执行 blazorserver 页面
【发布时间】:2021-09-23 13:19:26
【问题描述】:

我正在编写一个 blazorserver 应用程序。此应用程序包含带有 Microsoft 标识的身份验证表单。

我编写了一个帮助程序,告诉用户是否应该看到该页面:

@page "/pageurl/"
@if (true) { MyHelper.CheckUserPermission() }
....

这是我的 App.razor 文件的一部分:

  <AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
    <NotAuthorized>
      Message i want to see if user permissions are not good
    </NotAuthorized>
  </AuthorizeRouteView>

当用户权限不好时,我尝试在 CheckUserPermission 函数中放置 NavigationManager.NavigateTo。但是页面执行还是完成了。

我的问题是:我应该在 CheckUserPermission 函数中添加什么来停止页面执行并显示 NotAuthorized 消息?

谢谢

【问题讨论】:

    标签: asp.net-core blazor blazor-server-side


    【解决方案1】:

    改用角色。并使用@attribute [Authorize(Roles = "admin, superuser")] 在您要阻止访问的页面上。

    如果您必须使用您提供的逻辑,则创建一个检查用户访问级别的服务:

    public class AuthChecker
    {
        public bool HasAccess(ClaimsPrincipal user)
        {
           /// logic
    
        }
    }
    

    然后在剃须刀页面上:

    @inject AuthChecker checker
    
    @if(checker.HasAccess(user))
    {
      // component if authorized
    }else
    {
      // component if not authorized
    }
    

    【讨论】:

    • 感谢您的回答。我不能使用角色,因为我有一个非常具体的逻辑要实现。我已经尝试过你的 HasAccess 方法,但我不想有很大的如果。我想做的是检查 if (!checker.HasAccess(user) { return/break/die } 谢谢
    • 好的。然后把Navigation事件放到OnInitialized/OnParametersSet中?另外,您是希望用户只看到访问被拒绝还是要将他注销?
    • 事实上,用户是否看到消息或他的注销并不重要。我想要的是将检查行放在文件的顶部(而不是在 OnInitialized 中),并且我想确保如果用户无权访问,则不会执行任何代码或向用户显示。谢谢
    • 对不起,我以前从未这样做过,所以我无法发表评论。但是你可能想写一个自定义的 AuthenticationStateProvider 看看你能不能把那个逻辑放在那里。
    • 我也尝试过创建一个自定义的 AuthenticationStateProvider 但我无法将我的逻辑放在这个文件中:我的不同页面上有很多不同的逻辑...
    猜你喜欢
    • 1970-01-01
    • 2011-03-19
    • 2020-05-19
    • 2020-10-11
    • 2020-10-09
    • 2021-02-15
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多