2013-05-11 54 views
2

我正在构建一个小型MVC4网站,并使用SimpleMembershipProvider以及SimpleRoleProvider。如何自动将用户添加到角色

我已经播种了我的数据库,以便[webpages_Roles]包含“Administrator”和“User” (与此类似:link)。

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

现在我该怎么做,以便有人在注册时自动将其置于“用户”角色中?

+0

是否有任何用户创建/注册的事件可以侦听? – JensB 2013-05-12 11:41:58

回答

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 ... 
} 
+0

太简单了,谢谢。 :) – JensB 2013-05-13 14:53:26

相关问题