从用户 MVC 5 中删除所有角色

Remove all Roles from a user MVC 5

愿你平安

我正在尝试删除用户的所有角色以禁用他的权限并阻止他访问某些页面。

我发现这种删除一个角色的方法很有效:

await UserManager.RemoveFromRoleAsync(userid, role);

其中userid是我要禁用他权限的用户ID。

因此,我使用此代码删除同一用户的所有角色

foreach (string role in roles) {

 await UserManager.RemoveFromRoleAsync(userid, role);

}

但我卡在这里如何将 AspNetRoles table 中的角色 ID 保存到

string[] roles 

有什么帮助吗?

或者是否有其他方法可以删除用户的所有角色?

我正在使用 asp.net 身份版本 2

用户管理器有一个方法Task<IList<string>> GetRolesAsync(TKey userId),其中

Returns the roles for the user

还有 Task<IdentityResult> RemoveFromRolesAsync(TKey userId, params string[] roles)

Remove user from multiple roles

所以结合两者来实现你想要的

var roles = await UserManager.GetRolesAsync(userid);
await UserManager.RemoveFromRolesAsync(userid, roles.ToArray());

我是新手,但我尝试从 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 }.";
    }
}

这删除了所有现有角色并设置了新角色。