首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除用户MVC 5中的所有角色

删除用户MVC 5中的所有角色
EN

Stack Overflow用户
提问于 2016-12-10 18:40:53
回答 2查看 13.6K关注 0票数 9

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

我找到了这个方法来删除一个角色,它起作用了:

代码语言:javascript
运行
复制
await UserManager.RemoveFromRoleAsync(userid, role);

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

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

代码语言:javascript
运行
复制
foreach (string role in roles) {

 await UserManager.RemoveFromRoleAsync(userid, role);

}

但是我仍然停留在如何将AspNetRoles表中的角色Id保存到

代码语言:javascript
运行
复制
string[] roles 

有什么帮助吗?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-10 21:01:05

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

返回用户的角色

同时Task<IdentityResult> RemoveFromRolesAsync(TKey userId, params string[] roles)也指出

从多个角色中删除用户

因此,将两者结合起来以实现您想要的效果

代码语言:javascript
运行
复制
var roles = await UserManager.GetRolesAsync(userid);
await UserManager.RemoveFromRolesAsync(userid, roles.ToArray());
票数 28
EN

Stack Overflow用户

发布于 2020-10-12 02:52:39

我对这一切都是新手,但我尝试过在Blazor页面上更新和删除角色。这段代码似乎起作用了。

设置using和injections:

代码语言:javascript
运行
复制
@using Microsoft.AspNetCore.Identity
@using Microsoft.Extensions.Configuration

@inject RoleManager<IdentityRole> roleManager
@inject UserManager<IdentityUser> userManager
@inject SignInManager<IdentityUser> signInManager
@inject AuthenticationStateProvider userData

页面元素编码:

代码语言:javascript
运行
复制
<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#代码:

代码语言:javascript
运行
复制
@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 }.";
    }
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41074595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档