【问题标题】:How to add roles from database如何从数据库中添加角色
【发布时间】:2014-02-01 12:02:27
【问题描述】:

我有我的 ASP.NET MVC 4 项目和数据库 (SQL Server 2008)

我创建了一个实体框架模型,带有自动生成的模型。

并且在数据库中有一个名为 Roles 的表(2 个字段,ID 和名称)

有 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 应用程序中初始化角色?我试图检查角色是否存在并通过角色管理器在帐户控制器中初始化角色,但我认为这不是一个好的解决方案。

是否可以在 global.asax.cs 中初始化角色?

我知道我应该在登录功能中为用户附加角色。

提前致谢:)

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    这是我的解决方案,我认为有某种结构用于存储角色名称,需要初始化此结构,但我错了,谷歌搜索后,我找到了解决方案:

    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
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 2019-11-02
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    相关资源
    最近更新 更多