从用户MVC 5

时间:2016-12-10 10:40:53

标签: c# asp.net-mvc asp.net-mvc-5 asp.net-identity-2

和平在你身上

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

我发现这种方法可以删除一个角色并且有效:

await UserManager.RemoveFromRoleAsync(userid, role);

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

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

foreach (string role in roles) {

 await UserManager.RemoveFromRoleAsync(userid, role);

}

但我坚持在这里如何将AspNetRoles表中的角色ID保存到

string[] roles 

任何帮助?

还是有其他方法可以删除用户的所有角色吗?

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

2 个答案:

答案 0 :(得分:19)

用户管理器有一个方法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());

答案 1 :(得分:0)

我不熟悉所有这些,但是我尝试从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 }.";
    }
}

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