package service import ( "errors" "pure-admin/global" "pure-admin/model" "pure-admin/model/request" "pure-admin/utils" "strconv" uuid "github.com/satori/go.uuid" "gorm.io/gorm" ) //@function: Register //@description: 用户注册 //@param: u model.SysUser //@return: err error, userInter model.SysUser func Register(u model.User) (err error, userInter model.User) { var user model.SysUser if !errors.Is(global.MG_DB.Where("username = ?", u.Username).First(&user).Error, gorm.ErrRecordNotFound) { // 判断用户名是否注册 return errors.New("用户名已注册"), userInter } // 否则 附加uuid 密码md5简单加密 注册 u.Password = utils.MD5V([]byte(u.Password)) u.UUID = uuid.NewV4() u.Appid = "appid" u.Avatar = "http://qmplusimg.henrongyi.top/head.png" u.Type = "admin" err = global.MG_DB.Create(&u).Error if err != nil { err = errors.New("注册失败") } go InitRole(u.UUID.String(), strconv.Itoa(int(u.AuthorityID)), u.Appid) return err, u } //@function: Login //@description: 用户登录 //@param: u *model.SysUser //@return: err error, userInter *model.SysUser func Login(u *model.User) (err error, userInter *model.User) { var ( user model.User authorities []model.SysAuthority ) u.Password = utils.MD5V([]byte(u.Password)) err = global.MG_DB.Where("username = ? AND password = ? and type=?", u.Username, u.Password, "admin").First(&user).Error if err != nil { return errors.New("用户名不存在或者密码错误"), nil } e := Casbin() res := e.GetRolesForUserInDomain(user.UUID.String(), u.Appid) if len(res) > 0 { err = global.MG_DB.Where("authority_id IN ?", res).Find(&authorities).Error } else { err = errors.New("该用户未分配角色") } for _, v := range authorities { if user.AuthorityID == v.AuthorityId { user.Authority = v break } } user.Authorities = authorities return err, &user } //@function: ChangePassword //@description: 修改用户密码 //@param: u *model.SysUser, newPassword string //@return: err error, userInter *model.SysUser func ChangePassword(u *model.SysUser, newPassword string) (err error, userInter *model.SysUser) { var user model.SysUser u.Password = utils.MD5V([]byte(u.Password)) err = global.MG_DB.Where("username = ? AND password = ?", u.Username, u.Password).First(&user).Update("password", utils.MD5V([]byte(newPassword))).Error return err, u } //@function: GetUserInfoList //@description: 分页获取数据 //@param: info request.PageInfo //@return: err error, list interface{}, total int64 func GetUserInfoList1(info request.SearchSysUserParams, appid string) (err error, list interface{}, total int64) { var ( authorityIds = make([]string, 0) authorities []model.SysAuthority ) limit := info.PageSize offset := info.PageSize * (info.Page - 1) db := global.MG_DB.Model(&model.User{}) db = db.Where("appid=? and type=?", appid, "admin") if info.SysUser.NickName != "" { db = db.Where("nick_name LIKE ?", "%"+info.SysUser.NickName+"%") } if info.SysUser.Username != "" { db = db.Where("username LIKE ?", "%"+info.SysUser.Username+"%") } if info.SysUser.Phone != "" { db = db.Where("phone LIKE ?", "%"+info.SysUser.Phone+"%") } if info.SysUser.Status != "" { db = db.Where("status = ?", info.SysUser.Status) } var userList []model.User err = db.Count(&total).Error err = db.Limit(limit).Offset(offset).Find(&userList).Error if err != nil { return err, nil, 0 } for k, _ := range userList { e := Casbin() res := e.GetRolesForUserInDomain(userList[k].UUID.String(), appid) if len(res) > 0 { authorityIds = append(authorityIds, res...) } } if len(authorityIds) > 0 { err = global.MG_DB.Where("authority_id IN ?", authorityIds).Find(&authorities).Error } for k, _ := range userList { authorities1 := make([]model.SysAuthority, 0) for _, v := range authorities { if userList[k].AuthorityID == v.AuthorityId { authorities1 = append(authorities1, v) } } userList[k].Authorities = authorities1 } return err, userList, total } func GetUserSelectList(nickName, appid string) (list []model.SysUserSimple, err error) { db := global.MG_DB.Model(&model.User{}) if nickName != "" { db = db.Where("nick_name LIKE ?", "%"+nickName+"%") } err = db.Select("uuid,nick_name").Where("appid=?", appid).Find(&list).Error return } //@function: SetUserAuthority //@description: 设置一个用户的权限 //@param: uuid uuid.UUID, authorityId string //@return: err error func SetUserAuthority(uuid string, authorityId string) (err error) { err = global.MG_DB.Where("uuid = ?", uuid).First(&model.User{}).Update("authority_id", authorityId).Error return err } //@author: [piexlmax](https://github.com/piexlmax) //@function: SetUserAuthorities //@description: 设置一个用户的权限 //@param: id uint, authorityIds []string //@return: err error func SetUserAuthorities(uuid string, authorityIds []string) (err error) { if len(authorityIds) != 0 { err = global.MG_DB.Model(&model.SysUser{}).Where("uuid = ?", uuid).Update("authority_id", authorityIds[0]).Error if err != nil { return err } } return global.MG_DB.Transaction(func(tx *gorm.DB) error { // TxErr := tx.Delete(&[]model.SysUserAuthority{}, "sys_user_id = ?", uuid).Error // if TxErr != nil { // return TxErr // } // useAuthority := []model.SysUserAuthority{} // for _, v := range authorityIds { // useAuthority = append(useAuthority, model.SysUserAuthority{ // uuid, v, // }) // } // TxErr = tx.Create(&useAuthority).Error // if TxErr != nil { // return TxErr // } // 返回 nil 提交事务 return nil }) } //@function: DeleteUser //@description: 删除用户 //@param: id float64 //@return: err error func DeleteUser1(id float64) (err error) { var user model.User err = global.MG_DB.Where("id = ?", id).Delete(&user).Error // err = global.MG_DB.Delete(&[]model.SysUserAuthority{}, "sys_user_id = ?", id).Error return err } //@function: SetUserInfo //@description: 设置用户信息 //@param: reqUser model.SysUser //@return: err error, user model.SysUser func SetUserInfo(reqUser model.SysUser) (err error, user model.SysUser) { err = global.MG_DB.Model(&model.SysUser{}).Where("uuid = ?", reqUser.UUID).Updates(&reqUser).Scan(&user).Error return err, user } //@author: [piexlmax](https://github.com/piexlmax) //@function: GetUserInfo //@description: 获取用户信息 //@param: uuid string //@return: err error, user system.SysUser func GetUserInfo1(uuid string) (err error, user model.SysUser) { var reqUser model.SysUser err = global.MG_DB.Preload("Authority").Preload("Authorities").Preload("SysUserAuthors").First(&reqUser, "uuid = ?", uuid).Error if err != nil { return err, reqUser } return err, reqUser } //@function: FindUserById //@description: 通过id获取用户信息 //@param: id int //@return: err error, user *model.SysUser func FindUserById(id int) (err error, user *model.SysUser) { var u model.SysUser err = global.MG_DB.Where("`id` = ?", id).First(&u).Error return err, &u } //@function: FindUserByUuid //@description: 通过uuid获取用户信息 //@param: uuid string //@return: err error, user *model.SysUser func FindUserByUuid(uuid string) (err error, user *model.User) { var u model.User if err = global.MG_DB.Where("`uuid` = ?", uuid).First(&u).Error; err != nil { return errors.New("用户不存在"), &u } return nil, &u } func FindUserByAuthorityID(authority_id string) (err error, user *model.SysUser) { var u model.SysUser if err = global.MG_DB.Where("`authority_id` = ?", authority_id).First(&u).Error; err != nil { return errors.New("用户不存在"), &u } return nil, &u } func FindUserSimpleByUuid(uuid string) (err error, user *model.SysUserSimple) { var u model.SysUserSimple if err = global.MG_DB.Select("id,uuid,nick_name,username").Where("`uuid` = ?", uuid).First(&u).Error; err != nil { return errors.New("用户不存在"), &u } return nil, &u } func FindAuthorityByAuthorityID(id string) (err error, user *model.SysAuthoritySimple) { var u model.SysAuthoritySimple if err = global.MG_DB.Where("`authority_id` = ?", id).First(&u).Error; err != nil { return errors.New("角色不存在"), &u } return nil, &u } func GetSysUserAuthority(userId, authorityId string) (err error, list []global.BASE_ID_STR) { db := global.MG_DB.Table("sys_user_authority").Select("sys_user_id as id") if userId != "" { db = db.Where("sys_user_id = ?", userId) } if authorityId != "" { db = db.Where("sys_authority_id = ?", authorityId) } err = db.Find(&list).Error return err, list }