在Blazor服务器应用程序中获取登录用户角色



我对Blazor很陌生,已经知道如何列出数据库中的所有用户,但似乎不知道如何查看用户的角色,以便我可以输出到表中,以及在保存时将用户添加到该角色中。

要创建角色,可以使用以下语法

new AuthenticationState(
new ClaimsPrincipal(
new ClaimsIdentity(new[] { 
new Claim(ClaimTypes.Name, m_login),
new Claim(ClaimTypes.Role, "demo_role"),
new Claim(ClaimTypes.Role, "Admin"),
}, "PutAppNameHere"
)));

获取角色列表

public List<string> GetRoles(ClaimsPrincipal user)
{
var userIdentity = (ClaimsIdentity)user.Identity;
var claims = userIdentity.Claims;
return claims.Where(c => c.Type == ClaimTypes.Role).Select(_ => _.Value).ToList();
}

在我的Github示例中找到一个关于如何处理身份验证和本地化的完整功能示例

https://github.com/iso8859/AspNetCoreAuthMultiLang

我知道我来晚了,但也许这可以帮助你或其他人

获取具有指定角色的用户列表

public Task<List<UserProfileDto>> GetAllAsync()
{
var result = _context.Users
.Join(_context.UserRoles, u => u.Id, r => r.UserId, (u, r) => new { u, r })
.Join(_context.Roles, a => a.r.RoleId, rt => rt.Id, (a, rt) => new UserProfileDto
{
Id = a.u.Id,
Email = a.u.Email,
Phone = a.u.PhoneNumber,
Username = a.u.UserName,
IsActive = a.u.IsActive,
LockoutEnd = a.u.LockoutEnd,
Rolename = rt.Name
}).ToListAsync();
return result;
}

检查组件(.rarzor(上的登录用户角色

@if (User.IsInRole("Admin"))
{
<p>This is Admin area</p>
}

@code {
ClaimsPrincipal User = new ClaimsPrincipal();
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
protected override async Task OnInitializedAsync()
{
var authState = await authenticationStateTask;
User = authState.User;
}

}

检查登录的用户角色服务器端

public class DemoService
{
private readonly AuthenticationStateProvider _authState;
public DemoService(AuthenticationStateProvider authState)
{
_authState = authState;
}
public bool HasRole(string roleName)
{
var authstate = _authState.GetAuthenticationStateAsync().Result;
var user = authstate.User;
return user.IsInRole(roleName);
}
}

相关内容

  • 没有找到相关文章

最新更新