我有我的ASP.NET MVC 4项目和数据库(SQL Server 2008)
我已经使用自动生成的模型创建了一个实体框架模型。
在数据库中有一个名为Roles的表(2个字段,Id和名称)
有3个角色:管理员,主持人,用户。
Plus Account controller:
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应用程序中初始化角色的位置和方式是什么?我已经尝试检查角色是否存在并通过角色管理器在帐户控制器中初始化角色,但我认为这不是一个好的解决方案。
是否可以在global.asax.cs中初始化角色?
我知道我应该在登录功能中将角色附加到用户。
提前致谢:)
答案 0 :(得分:0)
这是我的解决方案,我认为存在某种用于存储角色名称的结构,并且需要初始化此结构,但我错了,在谷歌搜索之后,我找到了解决方案:< / p>
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