ASP.NET Core MVC 基于声明的授权

问题描述 投票:0回答:1

我有一个 ASP.NET Core MVC 应用程序。我没有任何单独的数据库。它完全依赖于Rest API。对于登录,进行 API 调用并获取响应。该 json 响应角色也包含在内。我想根据这个角色显示/隐藏菜单。不要向所有用户显示所有菜单。仅显示给特定角色(如管理员、顾问等)。做这个的最好方式是什么?如何做到这一点?

提前致谢。

c# asp.net-core-mvc authorization
1个回答
0
投票

要使用基于角色的菜单,您可以进行 API 调用并获取用户角色。然后将信息存储在session或cookie中:

public async Task<IActionResult> Login(LoginViewModel model)
{
    if (ModelState.IsValid)
    {
        var response = await _apiClient.AuthenticateUserAsync(model.Username, model.Password);
        if (response.IsSuccess)
        {
            HttpContext.Session.SetString("UserRole", response.UserRole);
            return RedirectToAction("Index", "Home");
        }
    }
    return View(model);
}

查看用户角色的方法:

public bool IsUserInRole(string requiredRole)
{
    var userRole = HttpContext.Session.GetString("UserRole");
    return userRole != null && userRole.Equals(requiredRole, StringComparison.OrdinalIgnoreCase);
}

查看:

@{
    bool isAdmin = IsUserInRole("Admin");
}

<div>
    <ul>
        <li><a href="/home/index">Home</a></li>
        @if (isAdmin)
        {
            <li><a href="/admin/dashboard">Admin Dashboard</a></li>
        }
        <li><a href="/account/profile">Profile</a></li>
    </ul>
</div>

[Authorize(Roles = "Admin")]
添加到保护控制器中的操作。

© www.soinside.com 2019 - 2024. All rights reserved.