Пример #1
0
        /// <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);
        }