我有一个名为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
中?这样,当应用程序运行时,这些角色首次被添加到数据库中。
假设这个程序第一次运行,并且有人点击了我希望有一个提到上述角色的下拉列表的注册按钮。因此,在单击寄存器之前,这些角色必须位于数据库中。
一旦角色在数据库中,我不需要担心以后访问这些值。 一种方法是手动在数据库中写入值,但我不想这样做,因为我有这个功能,我可以使用。
答案 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,也应该使用相同的主体,因为您使用的是代码优先。