107 lines
3.2 KiB
Go
107 lines
3.2 KiB
Go
package service
|
||
|
||
import (
|
||
"fmt"
|
||
|
||
"be.ems/src/framework/constants/cachekey"
|
||
"be.ems/src/framework/constants/common"
|
||
"be.ems/src/framework/redis"
|
||
"be.ems/src/framework/utils/parse"
|
||
systemModel "be.ems/src/modules/system/model"
|
||
systemService "be.ems/src/modules/system/service"
|
||
)
|
||
|
||
// 实例化服务层 RegisterImpl 结构体
|
||
var NewRegisterImpl = &RegisterImpl{
|
||
sysUserService: systemService.NewSysUserImpl,
|
||
sysConfigService: systemService.NewSysConfigImpl,
|
||
sysRoleService: systemService.NewSysRoleImpl,
|
||
}
|
||
|
||
// 账号注册操作处理 服务层处理
|
||
type RegisterImpl struct {
|
||
// 用户信息服务
|
||
sysUserService systemService.ISysUser
|
||
// 参数配置服务
|
||
sysConfigService systemService.ISysConfig
|
||
// 角色服务
|
||
sysRoleService systemService.ISysRole
|
||
}
|
||
|
||
// ValidateCaptcha 校验验证码
|
||
func (s *RegisterImpl) ValidateCaptcha(code, uuid string) error {
|
||
// 验证码检查,从数据库配置获取验证码开关 true开启,false关闭
|
||
captchaEnabledStr := s.sysConfigService.SelectConfigValueByKey("sys.account.captchaEnabled")
|
||
if !parse.Boolean(captchaEnabledStr) {
|
||
return nil
|
||
}
|
||
if code == "" || uuid == "" {
|
||
return fmt.Errorf("verification code information error")
|
||
}
|
||
verifyKey := cachekey.CAPTCHA_CODE_KEY + uuid
|
||
captcha, err := redis.Get("", verifyKey)
|
||
if err != nil {
|
||
return fmt.Errorf("the verification code has expired")
|
||
}
|
||
redis.Del("", verifyKey)
|
||
if captcha != code {
|
||
return fmt.Errorf("verification code error")
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// ByUserName 账号注册
|
||
func (s *RegisterImpl) ByUserName(username, password, userType string) (string, error) {
|
||
// 是否开启用户注册功能 true开启,false关闭
|
||
registerUserStr := s.sysConfigService.SelectConfigValueByKey("sys.account.registerUser")
|
||
captchaEnabled := parse.Boolean(registerUserStr)
|
||
if !captchaEnabled {
|
||
return "", fmt.Errorf("failed to register user [%s]. Sorry, the system has closed the external user registration channel", username)
|
||
}
|
||
|
||
// 检查用户登录账号是否唯一
|
||
uniqueUserName := s.sysUserService.CheckUniqueUserName(username, "")
|
||
if !uniqueUserName {
|
||
return "", fmt.Errorf("failed to register user [%s], registered account already exists", username)
|
||
}
|
||
|
||
sysUser := systemModel.SysUser{
|
||
UserName: username,
|
||
NickName: username, // 昵称使用名称账号
|
||
Password: password, // 原始密码
|
||
Status: common.STATUS_YES, // 账号状态激活
|
||
DeptID: "100", // 归属部门为根节点
|
||
CreateBy: "register", // 创建来源
|
||
}
|
||
// 标记用户类型
|
||
if userType == "" {
|
||
sysUser.UserType = "sys"
|
||
}
|
||
// 新增用户的角色管理
|
||
sysUser.RoleIDs = s.registerRoleInit(userType)
|
||
// 新增用户的岗位管理
|
||
sysUser.PostIDs = s.registerPostInit(userType)
|
||
|
||
insertId := s.sysUserService.InsertUser(sysUser)
|
||
if insertId != "" {
|
||
return insertId, nil
|
||
}
|
||
return "", fmt.Errorf("failed to register user [%s]. Please contact the system administrator", username)
|
||
}
|
||
|
||
// registerRoleInit 注册初始角色
|
||
func (s *RegisterImpl) registerRoleInit(userType string) []string {
|
||
if userType == "sys" {
|
||
return []string{}
|
||
}
|
||
return []string{}
|
||
}
|
||
|
||
// registerPostInit 注册初始岗位
|
||
func (s *RegisterImpl) registerPostInit(userType string) []string {
|
||
if userType == "sys" {
|
||
return []string{}
|
||
}
|
||
return []string{}
|
||
}
|