【问题标题】:Hiding menu according to permission in asp.net core根据 asp.net core 中的权限隐藏菜单
【发布时间】:2018-12-27 15:47:10
【问题描述】:

我需要检查用户是否有权限,如果他没有权限,菜单项将不会出现。

我正在尝试检查@UserManager.GetUserName(User),但我无法获取身份表中包含的所有数据来查看用户是否具有权限,在下面的示例中,他不认识“Cidades”这个词。

    <ul class="dropdown-menu " role="presentation">
     @if (UserManager.GetUserName(User.Cidades) == true)
     {
        <li><a asp-page="/Cidade/Index">Cidades</a></li>
     }

在带有控制器的页面中,我这样做并且效果很好:

ApplicationUser user = await UserManager.GetUserAsync(User);
            bool cidade = user.Cidades;
            if ( cidade == true)
            {
                return Page();
            }
            else
            {
                return RedirectToPage("/Error");
            }

在 _Layout.cshtml 视图中正确的做法是什么?

【问题讨论】:

    标签: asp.net asp.net-core asp.net-core-2.0


    【解决方案1】:

    使用View-bsed authorization

    基本上是这样说的:

    1. 注入授权服务

      @inject IAuthorizationService 授权服务

    2. 如下使用服务

      @if ((await AuthorizationService.AuthorizeAsync(User, "PolicyName")).Succeeded) {

      显示此段落是因为您履行了 PolicyName。

      }

    重要提示:

    不要依赖切换应用 UI 元素的可见性作为唯一的授权检查。

    【讨论】:

    • 如果“PolicyName”是一个身份表字段?这样做我得到一个错误:处理请求时发生未处理的异常。 InvalidOperationException:未找到策略:Cidades。
    猜你喜欢
    • 1970-01-01
    • 2016-05-01
    • 2018-11-08
    • 2021-06-20
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多