自动分配默认角色

时间:2015-01-07 12:20:08

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

如何自动为注册用户分配默认角色。我试过这个但是它没有用,我收到了错误:

[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");

1 个答案:

答案 0 :(得分: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 - 检查,因为如果您刚刚创建了用户,则不需要IMO。

如果尚未完成,则需要创建异步操作才能使用async / await

public async Task<ActionResult> Register(RegisterModel model)