2

我正在构建一个小型 MVC4 网站,并且正在使用 SimpleMembershipProvider 和 SimpleRoleProvider。

我已经播种了我的数据库,以便 [webpages_Roles] 包含“管理员”和“用户”(类似于:链接)。

帐户和用户配置文件模型的所有内容都与创建 MVC4 项目时一样。

现在我该如何做到这一点,以便当有人注册时,他们会自动被置于“用户”角色中?

4

1 回答 1

7

通常,您的所有用户注册逻辑都将驻留在您的帐户控制器中(如果您使用为 Internet 应用程序提供的模板之一,情况肯定是这样)。因此,您需要在注册方法中添加代码,以便在成功创建用户帐户后将用户添加到用户角色。

这比试图观察一个事件更简单、更整洁,即使一个事件存在。您应该会发现,在一个设计良好的应用程序中,您的注册码不会超过一个地方。如果您使用 Facebook 等社交网络登录名,这也可以让您处理 OAuth 场景。

例如,这就是您如何在 Internet 应用程序模板中将其与开箱即用的 AccountsController 一起使用(用于您的本地站点注册)

[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
    ... various actions ...

    // GET: /Account/Register
    [AllowAnonymous]
    public ActionResult Register() {
        return View();
    }
    // POST: /Account/Register
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model) {
        if (ModelState.IsValid) {
            // Attempt to register the user
            try {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
// ----------------- NEW LINES HERE
                Roles.AddUserToRoles(model.UserName, new[] { "Users" });
// ----------------- END NEW LINES
                WebSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e) {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

    ... more actions ...
}
于 2013-05-13T09:26:03.710 回答