如何在由 angular 和 .net core web api 组成的全栈应用程序中管理用户角色和权限

how to manage user roles and permission in a full stack application made up of angular and .net core web api

正在开发一个完整的堆栈 Web 应用程序,其中在应用程序的客户端部分使用 angular 和 .net 核心 Web api 作为应用程序的后端部分,我正在研究如何做当用户成功登录系统时,将用户角色从后端获取到客户端应用程序,因为我使用 jwt 身份验证,如果用户存在于数据库中,我能够获取我在声明身份中添加的电子邮件地址,如下所示

var tokenDescriptor = new SecurityTokenDescriptor
               {
                    Subject = new ClaimsIdentity(new Claim[]
                {
                new Claim(ClaimTypes.Email, obj.Email)
                })  

并且从客户端应用程序通过解码成功登录后从后端发送的令牌来获取此用户电子邮件

In Typescript File
    var tokenData = jwtHelper.decodeToken(token);
In HTML form
    {{ tokenData.email }}

因此,我不知道如何在声明身份中添加角色以及添加的电子邮件,并从 angular 应用程序中的令牌中获取它们,我可以将它们用作用户权限以访问客户端应用程序中的组件, 先谢谢了。

最简单的方法是使用循环将角色添加到声明中。这是一个完整的创建jwt令牌的方法。

    public string GenarateToken(User user)
    {
        var claims =new List<Claim>()
        {
            new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
            new Claim(ClaimTypes.Name, user.UserName),
        };

        foreach (var role in user.Roles)
        {
            claims.Add(new Claim(ClaimTypes.Role, role.Name));
        }
       
        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_conf.GetSection("AppSettings:secret").Value));

        var cred = new SigningCredentials(key, SecurityAlgorithms.HmacSha512Signature);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.Now.AddDays(1),
            SigningCredentials = cred
        };

        var tokenHandler = new JwtSecurityTokenHandler();

        var token = tokenHandler.CreateToken(tokenDescriptor);

        return tokenHandler.WriteToken(token);
     }