/// <summary>
        /// 根据学生视图模型创建或者维护与之匹配的用户数据,并进行持久化处理
        ///   1.缺省用户名采用学号数据
        ///   2.缺省密码:1234@Abcd
        /// </summary>
        /// <param name="student"></param>
        /// <returns></returns>
        public async Task <EntityProcessResult> CreateOrEditByStudent(Student student, string userName = null)
        {
            var result = new EntityProcessResult()
            {
                Succeeded = true, Messages = new List <string> {
                }
            };

            if (student.User == null)
            {
                // 检查重名
                var checkName = student.EmployeeCode;
                if (!String.IsNullOrEmpty(userName))
                {
                    checkName = userName;
                }

                var isUniquelyForName = await IsUniquelyForUserName(checkName);

                if (isUniquelyForName)
                {
                    var user = new ApplicationUser()
                    {
                        UserName        = student.EmployeeCode,
                        ChineseFullName = student.Name,
                        Email           = student.Email,
                        MobileNumber    = student.Mobile
                    };
                    if (!String.IsNullOrEmpty(userName))
                    {
                        user.UserName = userName;
                    }

                    var createResult = await _userManager.CreateAsync(user, "1234@Abcd");

                    result.BusinessObject = user;
                    if (createResult.Succeeded)
                    {
                        student.User = user;
                        await _studentRepository.AddOrEditAndSaveAsyn(student);

                        // 提取用户缺省归属角色组(班级角色组)
                        if (student.GradeAndClass != null)
                        {
                            var gradeAndClass = await _gradeAndClassRepository.GetSingleAsyn(student.GradeAndClass.Id, x => x.ApplicationRole);

                            if (gradeAndClass.ApplicationRole != null)
                            {
                                await _userManager.AddToRoleAsync(student.User, gradeAndClass.ApplicationRole.Name);

                                // 检查用户关联角色组类型声明
                                var userClaims = await _userManager.GetClaimsAsync(student.User);

                                var userRoleTypeClaim = userClaims.FirstOrDefault(x => x.Type == ClaimTypes.Name && x.Value == gradeAndClass.ApplicationRole.ApplicationRoleType.ToString());
                                // 添加角色组类型声明
                                if (userRoleTypeClaim == null)
                                {
                                    // 为用户创建一个归属系统角色类型的身份声明
                                    var claim = new Claim(ClaimTypes.Name, gradeAndClass.ApplicationRole.ApplicationRoleType.ToString());
                                    await _userManager.AddClaimAsync(student.User, claim);
                                }
                            }
                        }

                        // 加入缺省的角色组
                        var defaultRole = _roleManager.Roles.FirstOrDefault(x => x.ApplicationRoleType == ApplicationRoleTypeEnum.适用于普通注册用户);
                        if (defaultRole != null)
                        {
                            await _userManager.AddToRoleAsync(student.User, defaultRole.Name);
                        }
                    }
                }
                else
                {
                    result.Succeeded = false;
                    result.Messages.Add("提交的用户名已经存在,请检查相关的数据!");
                    return(result);
                }
            }
            else
            {
                student.User.UserName        = student.EmployeeCode;
                student.User.ChineseFullName = student.Name;
                student.User.Email           = student.Email;
                student.User.MobileNumber    = student.Mobile;
                if (!String.IsNullOrEmpty(userName))
                {
                    student.User.UserName = userName;
                }

                var editResult = await _userManager.UpdateAsync(student.User);

                result.BusinessObject = student.User;

                if (editResult.Succeeded)
                {
                    await _studentRepository.AddOrEditAndSaveAsyn(student);

                    // 提取用户缺省归属角色组(班级角色组)
                    if (student.GradeAndClass != null)
                    {
                        var gradeAndClass = await _gradeAndClassRepository.GetSingleAsyn(student.GradeAndClass.Id, x => x.ApplicationRole);

                        if (gradeAndClass.ApplicationRole != null)
                        {
                            await _userManager.AddToRoleAsync(student.User, gradeAndClass.ApplicationRole.Name);

                            // 检查用户关联角色组类型声明
                            var userClaims = await _userManager.GetClaimsAsync(student.User);

                            var userRoleTypeClaim = userClaims.FirstOrDefault(x => x.Type == ClaimTypes.Name && x.Value == gradeAndClass.ApplicationRole.ApplicationRoleType.ToString());
                            // 添加角色组类型声明
                            if (userRoleTypeClaim == null)
                            {
                                // 为用户创建一个归属系统角色类型的身份声明
                                var claim = new Claim(ClaimTypes.Name, gradeAndClass.ApplicationRole.ApplicationRoleType.ToString());
                                await _userManager.AddClaimAsync(student.User, claim);
                            }
                        }
                    }
                }
                else
                {
                    result.Succeeded = false;
                    result.Messages.Add("更新用户组数据保存出现异常,请联系相关人员处理!");
                    foreach (var err in editResult.Errors)
                    {
                        result.Messages.Add(err.Description);
                    }

                    return(result);
                }
            }
            return(result);
        }
        /// <summary>
        /// 根据员工视图模型创建或者维护与之匹配的用户数据,并进行持久化处理
        /// </summary>
        /// <param name="employee"></param>
        /// <returns></returns>
        public async Task <EntityProcessResult> CreateOrEditByEmployee(Employee employee, string userName = null)
        {
            // 初始化处理结果
            var result = new EntityProcessResult()
            {
                Succeeded = true, Messages = new List <string> {
                }
            };

            if (employee.User == null)
            {
                // 检查重名
                var newUserName = employee.EmployeeCode;  // 待检查重名,缺省直接使用员工工号
                if (!String.IsNullOrEmpty(userName))
                {
                    newUserName = userName;
                }

                var isUniquelyForName = await IsUniquelyForUserName(newUserName);   // 是否是唯一名称

                if (isUniquelyForName)
                {
                    var user = new ApplicationUser()
                    {
                        UserName        = employee.EmployeeCode,
                        ChineseFullName = employee.Name,
                        Email           = employee.Email,
                        MobileNumber    = employee.Mobile
                    };

                    user.UserName = newUserName;
                    // 使用缺省密码创建用户
                    var createResult = await _userManager.CreateAsync(user, "1234@Abcd");

                    result.BusinessObject = user;

                    if (createResult.Succeeded)
                    {
                        // 更新和持久化员工与用户关联关系
                        employee.User = user;
                        await _employeeRepository.AddOrEditAndSaveAsyn(employee);

                        // 提取用户缺省归属角色组(部门角色组)
                        if (employee.Department != null)
                        {
                            var department = await _departmentRepository.GetSingleAsyn(employee.Department.Id, x => x.ApplicationRole);

                            if (department.ApplicationRole != null)
                            {
                                // 将当前创建的用户添加到对应部门的角色组中
                                await _userManager.AddToRoleAsync(employee.User, department.ApplicationRole.Name);

                                // 检查用户关联角色组类型声明
                                var userClaims = await _userManager.GetClaimsAsync(employee.User);

                                var userRoleTypeClaim = userClaims.FirstOrDefault(x => x.Type == ClaimTypes.Name && x.Value == department.ApplicationRole.ApplicationRoleType.ToString());
                                // 添加角色组类型声明
                                if (userRoleTypeClaim == null)
                                {
                                    // 为用户创建一个归属系统角色类型的身份声明
                                    var claim = new Claim(ClaimTypes.Name, department.ApplicationRole.ApplicationRoleType.ToString());
                                    await _userManager.AddClaimAsync(employee.User, claim);
                                }
                            }
                        }

                        // 再加入缺省的用户组
                        var defaultRole = _roleManager.Roles.FirstOrDefault(x => x.ApplicationRoleType == ApplicationRoleTypeEnum.适用于普通注册用户);
                        if (defaultRole != null)
                        {
                            await _userManager.AddToRoleAsync(employee.User, defaultRole.Name);
                        }
                    }
                }
                else
                {
                    result.Succeeded = false;
                    result.Messages.Add("提交的用户名已经存在,请检查相关的数据!");
                    return(result);
                }
            }
            else
            {
                employee.User.UserName        = employee.EmployeeCode;
                employee.User.ChineseFullName = employee.Name;
                employee.User.Email           = employee.Email;
                employee.User.MobileNumber    = employee.Mobile;
                if (!String.IsNullOrEmpty(userName))
                {
                    employee.User.UserName = userName;
                }

                // 更新用户数据
                var editResult = await _userManager.UpdateAsync(employee.User);

                result.BusinessObject = employee.User;

                if (editResult.Succeeded)
                {
                    // 持久化员工与用户的关联关系
                    await _employeeRepository.AddOrEditAndSaveAsyn(employee);

                    // 提取用户缺省归属角色组(部门角色组)
                    if (employee.Department != null)
                    {
                        var department = await _departmentRepository.GetSingleAsyn(employee.Department.Id, x => x.ApplicationRole);

                        if (department.ApplicationRole != null)
                        {
                            await _userManager.AddToRoleAsync(employee.User, department.ApplicationRole.Name);

                            // 检查用户关联角色组类型声明
                            var userClaims = await _userManager.GetClaimsAsync(employee.User);

                            var userRoleTypeClaim = userClaims.FirstOrDefault(x => x.Type == ClaimTypes.Name && x.Value == department.ApplicationRole.ApplicationRoleType.ToString());
                            // 添加角色组类型声明
                            if (userRoleTypeClaim == null)
                            {
                                // 为用户创建一个归属系统角色类型的身份声明
                                var claim = new Claim(ClaimTypes.Name, department.ApplicationRole.ApplicationRoleType.ToString());
                                await _userManager.AddClaimAsync(employee.User, claim);
                            }
                        }
                    }
                }
                else
                {
                    result.Succeeded = false;
                    result.Messages.Add("更新用户组数据保存出现异常,请联系相关人员处理!");
                    foreach (var err in editResult.Errors)
                    {
                        result.Messages.Add(err.Description);
                    }

                    return(result);
                }
            }
            return(result);
        }
Exemple #3
0
        /// <summary>
        /// 根据班级对象创建或者修改响应的角色组
        /// </summary>
        /// <param name="department"></param>
        /// <returns></returns>
        public async Task <EntityProcessResult> CreateOrEditSaveByGradeAndClass(GradeAndClass gradeAndClass, string roleName = null)
        {
            var result = new EntityProcessResult()
            {
                Succeeded = true, Messages = new List <string> {
                }
            };

            if (gradeAndClass.ApplicationRole == null)
            {
                // 检查重名
                var checkName = gradeAndClass.Name;
                if (!String.IsNullOrEmpty(roleName))
                {
                    checkName = roleName;
                }

                // 检查重名
                var isUniquelyForName = await IsUniquelyForName(checkName);

                if (isUniquelyForName)
                {
                    // 新建用户组
                    var role = new ApplicationRole()
                    {
                        Name                = gradeAndClass.Name,
                        DisplayName         = gradeAndClass.Name,
                        Description         = gradeAndClass.Description,
                        SortCode            = "G_" + gradeAndClass.SortCode,
                        ApplicationRoleType = ApplicationRoleTypeEnum.适用于教学班级学员
                    };
                    var createResult = await _roleManager.CreateAsync(role);

                    // 根据创建的结果返回处理状态(创建失败)
                    if (createResult.Succeeded)
                    {
                        gradeAndClass.ApplicationRole = role;
                        await _gradeAndClassRepository.AddOrEditAndSaveAsyn(gradeAndClass);
                    }
                    else
                    {
                        result.Succeeded = false;
                        result.Messages.Add("新建用户组数据保存出现异常,请联系相关人员处理!");
                        foreach (var err in createResult.Errors)
                        {
                            result.Messages.Add(err.Description);
                        }

                        return(result);
                    }
                }
                else
                {
                    result.Succeeded = false;
                    result.Messages.Add("提交的部门名称已经存在同名的用户组,请检查相关的数据!");
                    return(result);
                }
            }
            else
            {
                gradeAndClass.ApplicationRole.Name        = gradeAndClass.Name;
                gradeAndClass.ApplicationRole.DisplayName = gradeAndClass.Name;
                gradeAndClass.ApplicationRole.Description = gradeAndClass.Description;
                gradeAndClass.ApplicationRole.SortCode    = "G_" + gradeAndClass.SortCode;

                if (!String.IsNullOrEmpty(roleName))
                {
                    gradeAndClass.ApplicationRole.Name = roleName;
                }

                var editResult = await _roleManager.UpdateAsync(gradeAndClass.ApplicationRole);

                result.BusinessObject = gradeAndClass.ApplicationRole;

                if (editResult.Succeeded)
                {
                    await _gradeAndClassRepository.AddOrEditAndSaveAsyn(gradeAndClass);
                }
                else
                {
                    result.Succeeded = false;
                    result.Messages.Add("更新用户组数据保存出现异常,请联系相关人员处理!");
                    foreach (var err in editResult.Errors)
                    {
                        result.Messages.Add(err.Description);
                    }

                    return(result);
                }
            }
            return(result);
        }