2014-02-01 4 views
0

У меня есть ASP.NET MVC 4 проекта и базы данных (SQL Server 2008)Как добавить роли из базы данных

И я создал рамочную модель лица, с автоматически сгенерированных моделей.

И в базе данных есть таблица называется Роли (2 поля, идентификатор и имя)

Там 3 роли: администратор, модератор, пользователь. Контроллер

Plus счета:

public class AccountController : Controller 
{ 

    private korovin_idzEntities db = new korovin_idzEntities(); 

    // 
    // GET: /Account/LogOn 

    public ActionResult LogOn() 
    { 
     return View(); 
    } 

    // 
    // POST: /Account/LogOn 

    [HttpPost] 
    public ActionResult LogOn(LogOnModel model/*, string returnUrl*/) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = db.Users.Where(x => x.username == model.UserName && x.password == model.Password).FirstOrDefault(); 

      if (user != null) 
      { 
       user.isRemember = model.RememberMe; 
       db.SaveChanges(); 
       ViewBag.UserName = model.UserName; 
       FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
       FormsAuthentication.RedirectFromLoginPage(model.UserName, false); 
      } 
      else 
      { 
       ModelState.AddModelError("", "The user name or password provided is incorrect."); 
      } 
     } 
     return View(model); 
    } 
} 

Где и как я могу инициализировать роли в моем приложении ASP.NET MVC? Я попытался проверить, существует ли роль и инициализировать роль rolemanager в контроллере учетных записей, но я думаю, что это нехорошее решение.

Возможно ли инициализировать роли в global.asax.cs?

Я знаю, что я должен прикреплять роли к пользователю в функции входа в систему.

Заранее спасибо :)

ответ

0

Вот мое решение, я подумал, что есть какое-то структура для хранения имен ролей и там необходимо инициализировать эту структуру, но я был неправ, и после того, как googling, я нашел решение:

protected void Application_PostAuthenticateRequest(object sender, EventArgs e) 
    { 
     var context = HttpContext.Current; 
     if (context.Request.IsAuthenticated) 
     { 
      string[] roles = LookupRolesForUser(context.User.Identity.Name); 
      var newUser = new GenericPrincipal(context.User.Identity, roles); 
      context.User = Thread.CurrentPrincipal = newUser; 
     } 
    } 

    #region helper 

    private string[] LookupRolesForUser(string userName) 
    { 
     string[] roles = new string[1]; 
     CosmosMusic.Models.korovin_idzEntities db = new CosmosMusic.Models.korovin_idzEntities(); 
     var roleId = db.Users.Where(x => x.username == userName).FirstOrDefault().id_role; 
     roles[0] = db.Role.Where(y => y.id_role == roleId).FirstOrDefault().name; 

     return roles; 
    } 
    #endregion 
+1

Это один из способов сделать это: другим будет создание пользовательского RoleProvider. http://msdn.microsoft.com/en-us/library/8fw7xh74.aspx – Joe

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