【问题标题】:Automatically assign default role自动分配默认角色
【发布时间】:2015-03-05 08:16:13
【问题描述】:

如何自动为注册用户分配默认角色。我正在尝试这个,但它不工作,我得到了错误:

[ProviderException: The role 'Member' was not found.]

这就是我的工作:

播种我的默认角色,使其从一开始就存在:

// Configuration.cs, Seed method.

if (!context.Roles.Any(r => r.Name == "Member"))
{
    var store = new RoleStore<IdentityRole>(context);
    var manager = new RoleManager<IdentityRole>(store);
    var role = new IdentityRole { Name = "Member" };

    manager.Create(role); // Member role gets created in AspNetRoles table.
}

在更新数据库之后,我向该角色添加了一个注册用户:

// AccountController, Register method (POST).

var user = new ApplicationUser { ... }

if (.. Succeeded)
{
    ..
    if (!Roles.IsUserInRole(user.UserName, "Member"))
        Roles.AddUserToRole(user.UserName, "Member");

    return RedirectToAction("Index", "Home");
}

注册新账户时出现错误:

[ProviderException: The role 'Member' was not found.] // Member exits in AspNetRoles

Line 176:                    if (!Roles.IsUserInRole(user.UserName, "Member"))
Line 177:                         Roles.AddUserToRole(user.UserName, "Member");

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-5 roles


    【解决方案1】:

    我认为您使用了错误的角色管理器。 Roles 很可能是 Simple Membership 角色提供者,而不是来自 Identity 的角色提供者。请尝试以下操作:

    if (.. Succeeded)
    {
        ..
        // if (!await UserManager.IsInRoleAsync(user.Id, "Member"))
        await UserManager.AddToRoleAsync(user.Id, "Member");
    
        return RedirectToAction("Index", "Home");
    }
    

    我注释掉了IsInRoleAsync-check,因为如果您刚刚创建了用户,则不需要 IMO。

    如果尚未完成,您需要创建一个异步操作以使用async/await

    public async Task<ActionResult> Register(RegisterModel model)
    

    【讨论】:

    • 工作就像一个魅力!我的播种方法是否也使用了错误的角色管理器,或者我可以这样吗?
    • @user3231419:不,您使用的是正确的RoleManager&lt;IdentityRole&gt;,因此该角色出现在AspNetRoles 表中,而不是一些webpages_Roles 表中...
    • 发现使用这种方法有点问题:注册新用户后,该用户被分配到数据库中的“成员”角色,但尚未在我检查的 _Layout.cshtml 页面上如果活动用户是会员。当我注销并再次登录时,它只识别用户具有成员角色,知道出了什么问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-19
    • 2016-10-20
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2020-05-30
    • 2015-08-22
    相关资源
    最近更新 更多