MVC4:在数据库中添加角色

时间:2013-06-12 13:17:47

标签: asp.net-mvc asp.net-mvc-4 roleprovider

我有一个名为Authorization的项目,其CodeFirstRoleProvider类继承自默认RoleProvider

public class CodeFirstRoleProvider : RoleProvider
{
    public override void CreateRole(string roleName)
        {
            if(string.IsNullOrEmpty(roleName)) return;
            using(var context = new SISContext())
            {
                var role = context.Roles.SingleOrDefault(rl => rl.RoleName == roleName);//Roles table exists in database 
                if(role == null)
                {
                    var newRole = new Role
                                      {
                                          RoleId = Guid.NewGuid(),
                                          RoleName = roleName
                                      };
                    context.Roles.Add(newRole);
                    context.SaveChanges();
                }
            }
        }
}

在我的其他项目WebPortal中,我想使用上面的方法,让我们按照以下方式

var _role = new CodeFirstRoleProvider();
            _role.CreateRole("Admin");
            _role.CreateRole("NonAdmin");

现在我需要将此代码放在webportal中?这样,当应用程序运行时,这些角色首次被添加到数据库中。

假设这个程序第一次运行,并且有人点击了我希望有一个提到上述角色的下拉列表的注册按钮。因此,在单击寄存器之前,这些角色必须位于数据库中。

一旦角色在数据库中,我不需要担心以后访问这些值。 一种方法是手动在数据库中写入值,但我不想这样做,因为我有这个功能,我可以使用。

2 个答案:

答案 0 :(得分:0)

如果我这样做了什么?

[AllowAnonymous]
        public ActionResult Login(string returnUrl)
        {
            var _role = new CodeFirstRoleProvider();//remove after role is added to database
            _role.CreateRole("Admiin");//remove after role is added to database
            _role.CreateRole("NonAdmin");//remove after role is added to database

            ViewBag.ReturnUrl = returnUrl;
            return View();
        }

将角色添加到数据库后,我删除那些进行角色添加的代码。

答案 1 :(得分:0)

看看这个article on seeding the SimpleMembership database。即使您没有使用SimpleRoleProvider,也应该使用相同的主体,因为您使用的是代码优先。