C# 如何检查用户是否处于单个角色?在.NET Core 3.1中使用标识
如何检查当前用户是否处于单个角色 在我的应用程序中,我可以让一个用户扮演多个角色,但有些角色(如C# 如何检查用户是否处于单个角色?在.NET Core 3.1中使用标识,c#,asp.net-core,.net-core,asp.net-identity,identity,C#,Asp.net Core,.net Core,Asp.net Identity,Identity,如何检查当前用户是否处于单个角色 在我的应用程序中,我可以让一个用户扮演多个角色,但有些角色(如Role1)具有特定的行为。 当用户有两个角色(Role1和Role2)时,如何将特定行为与Role1隔离? 如果用户在Role2中,那么他们应该有另一种行为,即使他们也在Role1中 我想出的解决办法是 if (User.IsInRole(Role1.ToString()) && !User.IsInRole(Role2.ToString())) { //implementat
Role1
)具有特定的行为。
当用户有两个角色(Role1
和Role2
)时,如何将特定行为与Role1
隔离?
如果用户在Role2
中,那么他们应该有另一种行为,即使他们也在Role1
中
我想出的解决办法是
if (User.IsInRole(Role1.ToString()) && !User.IsInRole(Role2.ToString()))
{
//implementation
}
还有别的办法吗?也许使用保险单?我想保险单对你的情况来说是最好的办法。 在生成器中创建使用Requiremeartion的策略 请参阅本帖: 如何检查当前用户是否处于单个角色 用户成功登录后,可以使用获取指定用户所属角色名称的列表。然后,根据结果检查用户是否处于单个角色
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
var user = _userManager.FindByEmailAsync(Input.Email).Result;
var roles = _userManager.GetRolesAsync(user).Result.ToArray();
// then, based on the roles array to check if the current user is in a single role.
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
屏幕截图如下:
[Authorize(Policy = "readpolicy")]
public IActionResult Index()
{
var roles = roleManager.Roles.ToList();
return View(roles);
}
[Authorize(Policy = "writepolicy")]
public IActionResult Create()
{
return View(new IdentityRole());
}
当用户有两个角色时,如何将特定行为与角色1隔离
角色(角色1和角色2)?如果用户在角色2中,那么他们应该
另一种行为,即使他们也在角色1中。还有别的办法吗?也许使用政策
是的,基于策略的授权是一个不错的选择。例如,在我的示例中,有3种角色:管理员、经理和用户
我们可以在Startup.cs文件中创建以下策略
services.AddAuthorization(options => {
options.AddPolicy("readpolicy",
builder => builder.RequireRole("Admin", "Manager", "User"));
options.AddPolicy("writepolicy",
builder => builder.RequireRole("Admin", "Manager"));
});
然后,我们将这些策略应用于角色控制器,如下所示:
[Authorize(Policy = "readpolicy")]
public IActionResult Index()
{
var roles = roleManager.Roles.ToList();
return View(roles);
}
[Authorize(Policy = "writepolicy")]
public IActionResult Create()
{
return View(new IdentityRole());
}
现在,我们可以根据策略调用action方法
参考:
我的解决方案是创建一种方法,检查用户是否在任何角色中:
public async Task<bool> IsInAnyRoleAsync(TUser user, RoleEnum[] roles)
{
var userIsInRole = new List<bool>();
foreach (var role in roles)
{
var roleName = Enum.GetName(role.GetType(), role);
userIsInRole.Add(await IsInRoleAsync(user, roleName));
}
return userIsInRole.Any(isInRole => isInRole == true);
}
获得了一个链接或更多关于如何做的信息吗?@ViniciusBassi更新了答案,你应该编码到权限(或)“声明”。这是短视的,很难维护为角色编写的代码。考虑:这并不能解决我的问题,但是当我编写一个解决方案时,它对我很有帮助。