从用户 MVC 5 中删除所有角色
Posted
技术标签:
【中文标题】从用户 MVC 5 中删除所有角色【英文标题】:Remove all Roles from a user MVC 5 【发布时间】:2017-04-25 18:27:22 【问题描述】:愿你平安
我正在尝试删除用户的所有角色以禁用他的权限并阻止他访问某些页面。
我发现这种方法可以删除一个角色并且它有效:
await UserManager.RemoveFromRoleAsync(userid, role);
其中 userid 是我要禁用他的权限的用户 ID。
所以,我使用此代码删除同一用户的所有角色
foreach (string role in roles)
await UserManager.RemoveFromRoleAsync(userid, role);
但我卡在这里如何将 AspNetRoles 表中的角色 ID 保存到
string[] roles
有什么帮助吗?
或者还有其他方法可以删除用户的所有角色吗?
我正在使用 asp.net 身份版本 2
【问题讨论】:
【参考方案1】:用户管理器有一个Task<IList<string>> GetRolesAsync(TKey userId)
方法
返回用户的角色
还有Task<IdentityResult> RemoveFromRolesAsync(TKey userId, params string[] roles)
那个
从多个角色中删除用户
所以结合两者来实现你想要的
var roles = await UserManager.GetRolesAsync(userid);
await UserManager.RemoveFromRolesAsync(userid, roles.ToArray());
【讨论】:
感谢您的快速回复。。当我使用写的两行时,出现错误消息:无法从IlistRemoveFromRolesAsync(user, new string[] "Administrator"
是行不通的!因为没有在 .NET Core 的 Identity
实现的上下文中获取角色?我简直不敢相信,但直接调用 remove 方法没有结果。【参考方案2】:
我不熟悉这一切,但我尝试从 Blazor 页面更新和删除角色。这段代码似乎有效。
设置使用和注入:
@using Microsoft.AspNetCore.Identity
@using Microsoft.Extensions.Configuration
@inject RoleManager<IdentityRole> roleManager
@inject UserManager<IdentityUser> userManager
@inject SignInManager<IdentityUser> signInManager
@inject AuthenticationStateProvider userData
页面元素代码:
<h3>Access Roles</h3>
<select class="custom-select custom-select-sm" @onchange="SetUserAccess">
<option value="-1" disabled selected>Select access...</option>
@foreach (var access in typeAccess)
<option value="@access">@access</option>
</select>
<p>
<h5>@message</h5>
</p>
C#代码:
@code
private UserRoles _userRoles = new UserRoles();
private List<string> typeAccess = new List<string>();
private IList<string> oldRoles = new List<string>();
private string newRole = "";
private string message = "";
protected override void OnParametersSet()
base.OnParametersSet();
typeAccess.Add("Administrator");
typeAccess.Add("Employee");
typeAccess.Add("Office Staff");
private async Task SetUserAccess(ChangeEventArgs selectedAccess)
foreach (var role in typeAccess)
var roleExist = await roleManager.RoleExistsAsync(role);
if (roleExist == false)
await roleManager.CreateAsync(new IdentityRole(role));
var authState = await userData.GetAuthenticationStateAsync();
string userName = authState.User.Identity.Name;
var user = await userManager.FindByEmailAsync(userName);
if (user != null)
oldRoles = await userManager.GetRolesAsync(user);
newRole = selectedAccess.Value.ToString();
@for (int i = 0; i < oldRoles.Count; i++)
await userManager.RemoveFromRolesAsync(user, oldRoles);
await userManager.AddToRoleAsync(user, newRole);
message = $" userName has had their role changed from oldRoles[0] to newRole .";
这会删除所有现有角色并设置新角色。
【讨论】:
以上是关于从用户 MVC 5 中删除所有角色的主要内容,如果未能解决你的问题,请参考以下文章