【发布时间】:2014-08-21 13:05:23
【问题描述】:
我的意思是能够使用 SimpleMembership。首先,我在 Global.asax.cs 类中创建了角色。
Database.SetInitializer<UsersContext>(new InitSecurityDb());
UsersContext context = new UsersContext();
context.Database.Initialize(true);
if (!WebSecurity.Initialized)
WebSecurity.InitializeDatabaseConnection("DefaultConnection",
"UserProfile", "UserId", "UserName", autoCreateTables: true);
var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)Membership.Provider;
if (!roles.RoleExists("Manager"))
{
roles.CreateRole("Manager");
}
if (!roles.RoleExists("Developer"))
{
roles.CreateRole("Developer");
}
然后我根据用户类型为用户添加了一个角色。如果用户类型是经理,我想将经理角色添加到我的用户。我发布的注册操作:
public ActionResult Register(RegisterModel model)
{
var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)Membership.Provider;
if (membership.GetUser(model.UserName, false) == null)
{
membership.CreateUserAndAccount(model.UserName, model.Password);
}
if(model.status == UserType.Manager)
{
if (!roles.GetRolesForUser(model.UserName).Equals("Manager"))
{
roles.AddUsersToRoles(new[] { model.UserName }, new[] { "manager" });
}
}
if (model.status == UserType.Developer)
{
if (!roles.GetRolesForUser(model.UserName).Equals("Developer"))
{
roles.AddUsersToRoles(new[] { model.UserName }, new[] { "developer" });
}
}
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { UserName = model.UserName, Password = model.Password, firstName = model.firstName, lastName = model.lastName, Email = model.Email, status = model.status });
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
在注册操作中的“membership.CreateUserAndAccount(model.UserName, model.Password)”行中我收到以下错误:
System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理。 附加信息:无法将值 NULL 插入到列“状态”、表“MyApplication.dbo.UserProfile”中;列不允许空值。插入失败。
我的 userProfile 类
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
[Required(ErrorMessage = "Lütfen adınızı giriniz.")]
public string firstName { get; set; }
[Required(ErrorMessage = "Lütfen soyadınızı giriniz.")]
public string lastName { get; set; }
[DataType(DataType.Password)]
[Required(ErrorMessage = "Lütfen şifrenizi giriniz...")]
public string Password { get; set; }
[Required(ErrorMessage = "Lütfen e-posta adresinizi giriniz.")]
[DataType(DataType.EmailAddress, ErrorMessage = "Lütfen e-posta adresinizi geçerli bir formatta giriniz.")]
public string Email { get; set; }
public UserType status { get; set; }
}
最后是我的注册模型:
public class RegisterModel
{
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
public string Email { get; set; }
public UserType status { get; set; }
}
提前致谢。
【问题讨论】:
标签: c# asp.net asp.net-mvc simplemembership