/// <summary> /// 建立子帳號 /// </summary> /// <param name="model"></param> /// <param name="entity"></param> /// <param name="id"></param> /// <returns></returns> protected override async Task <ApplicationUser> DoCreate(ApplicationUserModel model, ApplicationUser entity) { // 確認帳號是否存在 if (context.Set <ApplicationUser>().Any(p => p.UserName == model.UserName)) { throw new Exception(string.Format("帳號 {0} 已經存在", model.UserName)); } // 當角色是 DepartmentHead 或者 Employee,必須指定部門 var roleName = GetRoleName(model.RoleId); var role = (Role)Enum.Parse(typeof(Role), roleName); if (role == Role.DepartmentHead || role == Role.Employee) { if (model.DepartmentId == 0) { throw new Exception("當角色為部門主管或員工時,必須指定所屬部門"); } } entity = new ApplicationUser(); entity.Level = CurrentUser.Level - 1; entity.ParentId = CurrentUserId; entity.UserName = model.UserName; entity.FullName = model.FullName; entity.SmsBalance = 0M; entity.SmsBalanceExpireDate = DateTime.MaxValue; entity.Department = model.DepartmentId == 0 ? null : context.Set <Department>().FirstOrDefault(p => p.Id == model.DepartmentId); entity.EmployeeNo = model.EmployeeNo; entity.PhoneNumber = model.PhoneNumber; entity.Email = model.Email; entity.Enabled = true; entity.SmsProviderType = model.SmsProviderType; var userManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context)); // 建立帳號 var result = await userManager.CreateAsync( entity, model.NewPassword); if (!result.Succeeded) { string errors = string.Join(",", result.Errors.ToList()); throw new Exception(string.Format("建立子帳號失敗,{0}", errors)); } // 加入腳色 await userManager.AddToRoleAsync( entity.Id, GetRoleName(model.RoleId)); var creditWarning = new CreditWarning { Enabled = CreditWarning.DefaultValue_Enabled, BySmsMessage = CreditWarning.DefaultValue_BySmsMessage, ByEmail = CreditWarning.DefaultValue_ByEmail, LastNotifiedTime = null, NotifiedInterval = CreditWarning.DefaultValue_NotifiedInterval, OwnerId = entity.Id, }; await context.InsertAsync(creditWarning); var replyCc = new ReplyCc { Enabled = ReplyCc.DefaultValue_Enabled, BySmsMessage = ReplyCc.DefaultValue_BySmsMessage, ByEmail = ReplyCc.DefaultValue_ByEmail, OwnerId = entity.Id, }; await context.InsertAsync(replyCc); // 建立預設群組 [常用聯絡人] var group = new Group(); group.Name = Group.CommonContactGroupName; group.Description = Group.CommonContactGroupName; group.Deletable = false; group.CreatedUser = entity; await context.InsertAsync(group); return(entity); }
private async Task <ApplicationUser> CreateUser( ApplicationDbContext context, Role role, string username, string password, decimal smsBalance, string phoneNumber, ApplicationUser parent) { var userManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(context)); var user = await userManager.FindByNameAsync(username); if (user == null) { int level = (parent != null) ? parent.Level - 1 : int.MaxValue - 1 /* 資料庫最大整數值為 int.MaxValue - 1 */; string parentId = (parent != null) ? parent.Id : null; user = new ApplicationUser { Level = level, UserName = username, FullName = username, SmsBalanceExpireDate = DateTime.MaxValue }; user.Level = level; user.ParentId = parentId; user.UserName = username; user.SmsBalance = smsBalance; user.SmsBalanceExpireDate = DateTime.MaxValue; user.Department = null; user.EmployeeNo = null; user.PhoneNumber = phoneNumber; user.Email = null; user.Enabled = true; // 建立帳號 await userManager.CreateAsync(user, password); // 加入腳色 await userManager.AddToRoleAsync(user.Id, role.ToString()); var creditWarning = new CreditWarning { Enabled = CreditWarning.DefaultValue_Enabled, BySmsMessage = CreditWarning.DefaultValue_BySmsMessage, ByEmail = CreditWarning.DefaultValue_ByEmail, LastNotifiedTime = null, NotifiedInterval = CreditWarning.DefaultValue_NotifiedInterval, Owner = user, }; context.CreditWarnings.Add(creditWarning); context.SaveChanges(); var replyCc = new ReplyCc { Enabled = ReplyCc.DefaultValue_Enabled, BySmsMessage = ReplyCc.DefaultValue_BySmsMessage, ByEmail = ReplyCc.DefaultValue_ByEmail, Owner = user, }; context.ReplyCcs.Add(replyCc); context.SaveChanges(); // 建立預設群組 [常用聯絡人] var group = new Group(); group.Name = Group.CommonContactGroupName; group.Description = Group.CommonContactGroupName; group.Deletable = false; group.CreatedUser = user; context.Groups.Add(group); context.SaveChanges(); } return(user); }