2013-05-11 2 views
2

Я создаю небольшой веб-сайт MVC4 и использую SimpleMembershipProvider вместе с SimpleRoleProvider.Как автоматически добавлять пользователей к ролям

Я засеял мою базу данных так, что [webpages_Roles] содержит «Администратор» и «Пользователь» (похоже на это: link).

Все, у кого есть учетная запись и модель профиля пользователя, была такой, какая была при создании проекта MVC4.

Теперь, как я могу сделать так, чтобы, когда кто-либо регистрируется, они автоматически помещаются в роль «Пользователь»?

+0

Есть ли какой-либо пользователь создал/зарегистрированное событие, которое я могу слушать? – JensB

ответ

7

Обычно ваша логика регистрации пользователя будет находиться в контроллере ваших учетных записей (это, безусловно, имеет место, если вы используете один из предоставленных шаблонов для интернет-приложения). Поэтому вам нужно будет добавить код к методу регистрации, чтобы добавить пользователя в роль пользователя, как только их учетная запись будет успешно создана.

Это проще и аккуратнее, чем пытаться наблюдать за событием, даже если оно существует. Вы должны найти, что в хорошо спроектированном приложении вы не будете иметь свой регистрационный код не более чем в одном месте. Это также позволяет обрабатывать сценарии OAuth, если вы используете учетные записи социальных сетей, таких как Facebook.

например. Это, как вы могли бы использовать его с вне коробки 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

Смежные вопросы