| | |
| | | package service |
| | | |
| | | import ( |
| | | "errors" |
| | | "fmt" |
| | | "path" |
| | | "strconv" |
| | | "strings" |
| | | "time" |
| | | "vamicro/extend/util" |
| | | "vamicro/system-service/models" |
| | | "vamicro/system-service/vo" |
| | | |
| | | "basic.com/fileServer/WeedFSClient.git" |
| | | "basic.com/valib/bhomedbapi.git" |
| | | "basic.com/valib/logger.git" |
| | | uuid "github.com/satori/go.uuid" |
| | | ) |
| | | |
| | | type UserService struct { |
| | | } |
| | | |
| | | func (sv UserService) Login(loginVo vo.UserVo) (flag bool, loginAppUser vo.LoginAppUser) { |
| | | if loginVo.UserName == "" || loginVo.Password == "" { |
| | | return false, loginAppUser |
| | | } |
| | | /*if AuthInfo.ExpirationTime < time.Now().Unix() { |
| | | loginAppUser.RoleName = "未授权用户" |
| | | return false,loginAppUser |
| | | }*/ |
| | | var userE models.SysUser |
| | | rows, err := userE.FindByName(loginVo.UserName) |
| | | if err != nil || rows == 0 { |
| | | return false, loginAppUser |
| | | } |
| | | if pwdStr, err := util.Encrypt(loginVo.Password); err == nil && pwdStr == userE.Password { |
| | | user2LoginAppUser(&userE, &loginAppUser) |
| | | var roleE models.SysRole |
| | | roles := roleE.FindByUserId(userE.Id) |
| | | loginAppUser.SysRoles = roles |
| | | if len(roles) > 0 { |
| | | loginAppUser.RoleName = roles[0].Name |
| | | } |
| | | loginAppUser.HeadPic = userE.HeadPic |
| | | return true, loginAppUser |
| | | } |
| | | return false, loginAppUser |
| | | } |
| | | |
| | | func user2LoginAppUser(userE *models.SysUser, loginAppUser *vo.LoginAppUser) { |
| | | loginAppUser.Id = userE.Id |
| | | loginAppUser.Username = userE.Username |
| | | loginAppUser.Nickname = userE.Nickname |
| | | loginAppUser.HeadPic = userE.HeadPic |
| | | loginAppUser.BackgroundPic = userE.BackgroundPic |
| | | loginAppUser.UseIconType = userE.UseIconType |
| | | |
| | | permissions := make([]string, 0) |
| | | pM := make(map[string]models.SysMenu, 0) |
| | | var roleE models.SysRole |
| | | var menuE models.SysMenu |
| | | var srm models.SysRoleMenu |
| | | var sum models.SysUserMenu |
| | | allMenus := menuE.FindAll() |
| | | roles := roleE.FindByUserId(userE.Id) //用户角色 |
| | | loginAppUser.SysRoles = roles |
| | | |
| | | if roles != nil && allMenus != nil { |
| | | menuMap := make(map[string]models.SysMenu, 0) |
| | | for _, menuE := range allMenus { |
| | | menuMap[menuE.Id] = menuE |
| | | } |
| | | var userMenus []vo.SysMenuVo |
| | | if len(roles) > 0 && roles[0].Name == "超级管理员" { |
| | | for _, menuModel := range menuMap { |
| | | userMenus = append(userMenus, vo.SysMenuVo{ |
| | | SysMenu: menuModel, |
| | | }) |
| | | pM[menuModel.Id] = menuModel |
| | | } |
| | | |
| | | } else { |
| | | sumList, _ := sum.FindByRoleId(userE.Id) |
| | | if nil != sumList && len(sumList) > 0 { |
| | | for _, srmE := range sumList { |
| | | if _, ok := pM[srmE.MenuId]; !ok { |
| | | menuModel := menuMap[srmE.MenuId] |
| | | pM[menuModel.Id] = menuModel |
| | | |
| | | pidArr := strings.Split(menuModel.ParentIds, ",") |
| | | for _, pid := range pidArr { |
| | | if pid != "" && pid != "0" { |
| | | if _, k := pM[pid]; !k { |
| | | pM[pid] = menuMap[pid] |
| | | } |
| | | } |
| | | } |
| | | |
| | | userMenus = append(userMenus, vo.SysMenuVo{ |
| | | SysMenu: menuModel, |
| | | }) |
| | | } |
| | | } |
| | | } else { |
| | | for _, role := range roles { |
| | | srmList, _ := srm.FindByRoleId(role.Id) |
| | | if srmList != nil { |
| | | //var userMenus []vo.SysMenuVo |
| | | for _, srmE := range srmList { |
| | | if _, ok := pM[srmE.MenuId]; !ok { |
| | | menuModel := menuMap[srmE.MenuId] |
| | | pM[menuModel.Id] = menuModel |
| | | |
| | | pidArr := strings.Split(menuModel.ParentIds, ",") |
| | | for _, pid := range pidArr { |
| | | if pid != "" && pid != "0" { |
| | | if _, k := pM[pid]; !k { |
| | | pM[pid] = menuMap[pid] |
| | | } |
| | | } |
| | | } |
| | | |
| | | userMenus = append(userMenus, vo.SysMenuVo{ |
| | | SysMenu: menuModel, |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | loginAppUser.SysMenus = userMenus |
| | | |
| | | } |
| | | for _, v := range pM { |
| | | permissions = append(permissions, v.Permission) |
| | | } |
| | | loginAppUser.Permissions = permissions |
| | | logger.Debug("permissions:", permissions) |
| | | } |
| | | |
| | | func (sv UserService) UpdatePwd(userId string, oldPwd string, newPwd string, opUserId string) (bool, error) { |
| | | var userE models.SysUser |
| | | rows, err := userE.SelectById(userId) |
| | | if err != nil || rows == 0 { |
| | | return false, errors.New("用户未找到!") |
| | | } |
| | | if oldPwd != "" { |
| | | if encryOldPwd, _ := util.Encrypt(oldPwd); encryOldPwd == userE.Password { //旧密码匹配 |
| | | encryNewPwd, err := util.Encrypt(newPwd) |
| | | if err == nil { |
| | | return userE.UpdatePwd(userId, encryNewPwd), nil |
| | | } else { |
| | | return false, err |
| | | } |
| | | } else { |
| | | return false, errors.New("原密码不正确!") |
| | | } |
| | | } else { |
| | | var roleE models.SysRole |
| | | roles := roleE.FindByUserId(userE.Id) //用户角色 |
| | | opRoles := roleE.FindByUserId(opUserId) |
| | | if len(roles) > 0 && roles[0].Name == "超级管理员" { |
| | | return false, errors.New("您没有权限修改超级管理员的密码!") |
| | | } |
| | | if len(roles) > 0 && roles[0].Name == "管理员" { |
| | | if len(opRoles) < 0 || opRoles[0].Name != "超级管理员" { |
| | | return false, errors.New("您没有权限修改管理员的密码!") |
| | | } |
| | | } |
| | | if len(roles) > 0 && roles[0].Name == "普通用户" { |
| | | if len(opRoles) < 0 || opRoles[0].Name != "超级管理员" && opRoles[0].Name != "管理员" { |
| | | return false, errors.New("您没有权限修改普通用户的密码!") |
| | | } |
| | | } |
| | | encryNewPwd, err := util.Encrypt(newPwd) |
| | | if err == nil { |
| | | return userE.UpdatePwd(userId, encryNewPwd), nil |
| | | } else { |
| | | return false, err |
| | | } |
| | | } |
| | | } |
| | | |
| | | func (sv UserService) AddUser(userVo vo.UserVo) (bool, string) { |
| | | var userE models.SysUser |
| | | var userR models.SysRole |
| | | rows, err := userE.FindByName(userVo.UserName) |
| | | if err != nil { |
| | | return false, "" |
| | | } |
| | | if rows > 0 { |
| | | return false, "用户名已存在" |
| | | } else { |
| | | if len([]byte(userVo.Password)) < 6 { |
| | | return false, "密码长度不能小于6位" |
| | | } |
| | | pwdStr, err := util.Encrypt(userVo.Password) |
| | | if err != nil { |
| | | return false, "添加失败" |
| | | } |
| | | addModel := models.SysUser{ |
| | | Username: userVo.UserName, |
| | | Password: pwdStr, |
| | | Nickname: userVo.Nickname, |
| | | HeadPic: userVo.HeadPic, |
| | | BackgroundPic: models.DefaultBgPic, |
| | | } |
| | | if flag, err := addModel.Insert(); flag && err == nil { |
| | | if "" == userVo.RoleId { |
| | | _, err := userR.FindByName("普通用户") |
| | | if err == nil { |
| | | userVo.RoleId = userR.Id |
| | | } |
| | | } |
| | | if "" != userVo.RoleId { |
| | | userRole := models.SysUserRole{ |
| | | UserId: addModel.Id, |
| | | RoleId: userVo.RoleId, |
| | | } |
| | | userRole.Insert() |
| | | } |
| | | return true, "添加成功" |
| | | } else { |
| | | return false, "添加失败" |
| | | } |
| | | } |
| | | } |
| | | |
| | | func (sv UserService) FindAll(curUserId string) (allAppUser []vo.LoginAppUser, err error) { |
| | | var userE models.SysUser |
| | | rows, err := userE.SelectById(curUserId) |
| | | if err != nil || rows == 0 { |
| | | return nil, err |
| | | } else { |
| | | list, _ := userE.FindAll() |
| | | var myself vo.LoginAppUser |
| | | if list != nil { |
| | | tmpList := make([]vo.LoginAppUser, 1) |
| | | var roleE models.SysRole |
| | | roles := roleE.FindByUserId(userE.Id) |
| | | if roles != nil && len(roles) == 1 { |
| | | if roles[0].Name == "超级管理员" { |
| | | for _, u := range list { |
| | | if u.Id == curUserId { |
| | | user2LoginAppUser(&u, &myself) |
| | | } else { |
| | | var appUE vo.LoginAppUser |
| | | user2LoginAppUser(&u, &appUE) |
| | | tmpList = append(tmpList, appUE) |
| | | } |
| | | } |
| | | } else if roles[0].Name == "管理员" { |
| | | for _, u := range list { |
| | | var appUE vo.LoginAppUser |
| | | appUERoles := roleE.FindByUserId(u.Id) |
| | | if appUERoles != nil && len(appUERoles) == 1 { |
| | | if u.Id == curUserId { |
| | | user2LoginAppUser(&u, &myself) |
| | | } else if appUERoles[0].Name == "普通用户" { |
| | | user2LoginAppUser(&u, &appUE) |
| | | tmpList = append(tmpList, appUE) |
| | | } |
| | | } |
| | | } |
| | | } else if roles[0].Name == "普通用户" { |
| | | for _, u := range list { |
| | | //var appUE vo.LoginAppUser |
| | | appUERoles := roleE.FindByUserId(u.Id) |
| | | if appUERoles != nil && len(appUERoles) == 1 { |
| | | if u.Id == curUserId { |
| | | user2LoginAppUser(&u, &myself) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | tmpList[0] = myself |
| | | return tmpList, nil |
| | | |
| | | } else { |
| | | return []vo.LoginAppUser{}, nil |
| | | } |
| | | } |
| | | } |
| | | |
| | | func (sv UserService) FindByUserId(userId string) (userAuth vo.UserAuthVo, err error) { |
| | | var userE models.SysUser |
| | | rows, _ := userE.SelectById(userId) |
| | | if rows > 0 { |
| | | //userAuth.Id = userE.Id |
| | | //userAuth.Username = userE.Username |
| | | //userAuth.Nickname = userE.Nickname |
| | | //userAuth.HeadPic = userE.HeadPic |
| | | |
| | | userAuth.SysUser = userE |
| | | |
| | | var appUE vo.LoginAppUser |
| | | user2LoginAppUser(&userE, &appUE) |
| | | userAuth.Menus = appUE.SysMenus |
| | | |
| | | //var roleE models.SysRole |
| | | //var menuE models.SysMenu |
| | | //userAuth.Menus = menuE.FindByUserId(userE.Id) |
| | | //if nil == userAuth.Menus { |
| | | // roles := roleE.FindByUserId(userE.Id) |
| | | // if roles!=nil && len(roles) == 1{ |
| | | // userAuth.Menus = menuE.FindByRoleId(roles[0].Id) |
| | | // } |
| | | //} |
| | | |
| | | return userAuth, nil |
| | | } |
| | | return userAuth, errors.New("user not found") |
| | | } |
| | | |
| | | func (sv UserService) SaveAuth(userEditVo *vo.UserEditVo, opuserId string) error { |
| | | var userE models.SysUser |
| | | rows, e1 := userE.SelectById(userEditVo.Id) |
| | | if e1 == nil && rows > 0 { |
| | | //var userTmp models.SysUser |
| | | //userEditVo.UserName = rows[] |
| | | //existU, e2 := userTmp.FindByName(userEditVo.UserName) |
| | | //existU := -1 |
| | | e2 := e1 |
| | | if e2 == nil { |
| | | /*if existU > 0 && userTmp.Id != userE.Id { //企图修改为他人的用户名 |
| | | return false |
| | | } |
| | | reUname := false |
| | | if existU == 0 { //修改用户名为一个未被使用的用户名 |
| | | reUname = true |
| | | }*/ |
| | | |
| | | //uNewPwd, _ := util.Encrypt(userEditVo.NewPwd) |
| | | var roleE models.SysRole |
| | | roles := roleE.FindByUserId(userE.Id) |
| | | if roles != nil && len(roles) == 1 { |
| | | userRole := roles[0] |
| | | oproles := roleE.FindByUserId(opuserId) |
| | | if oproles[0].Name == "管理员" && userRole.Name != "普通用户" { |
| | | return errors.New("管理员只能修改普通用户权限") |
| | | } |
| | | if oproles[0].Name == "普通用户" { |
| | | return errors.New("普通用户不能修改权限") |
| | | } |
| | | //userRole := roles[0] |
| | | var err error |
| | | tx := models.GetDB().Begin() |
| | | defer func() { |
| | | if err != nil && tx != nil { |
| | | tx.Rollback() |
| | | } |
| | | }() |
| | | /*if reUname && userRole.Name == "普通用户" { //只有普通用户才允许修改用户名 |
| | | err = tx.Exec("update sys_user set username=? where id=?", userEditVo.UserName, userEditVo.Id).Error |
| | | if err !=nil { |
| | | return false |
| | | } |
| | | } |
| | | if userEditVo.NewPwd !="" {//如果密码不为空,则修改密码 |
| | | err = tx.Exec("update sys_user set password=? where id=?",uNewPwd,userEditVo.Id).Error |
| | | if err !=nil { |
| | | return false |
| | | } |
| | | }*/ |
| | | |
| | | //处理当前用户权限 |
| | | err = tx.Exec("delete from sys_user_menu where user_id=?", userE.Id).Error |
| | | if err != nil { |
| | | return err |
| | | } |
| | | for _, menuId := range userEditVo.MenuIds { |
| | | err = tx.Exec("insert into sys_user_menu (id,user_id,menu_id) values (?,?,?)", uuid.NewV4().String(), userE.Id, menuId).Error |
| | | if err != nil { |
| | | return err |
| | | } |
| | | } |
| | | tx.Commit() |
| | | return nil |
| | | } else { |
| | | return errors.New("user role is not set") |
| | | } |
| | | } |
| | | } |
| | | return errors.New("user not found") |
| | | } |
| | | |
| | | //上传头像 |
| | | func (sv UserService) UploadHeadPic(fileBytes []byte, filename string) (string, error) { |
| | | fileExt := path.Ext(filename) |
| | | fileExt = strings.ToLower(fileExt) |
| | | if fileExt != ".jpg" && fileExt != ".jpeg" && fileExt != ".png" { |
| | | return "", errors.New("pic format error") |
| | | } |
| | | var sApi bhomedbapi.SysSetApi |
| | | flag, localConf := sApi.GetServerInfo() |
| | | if !flag || localConf.AlarmIp == "" || localConf.AlarmPort == 0 { |
| | | logger.Debug("localConf err") |
| | | return "", errors.New("localConf err") |
| | | } |
| | | |
| | | var weedfsUri = "http://" + localConf.WebPicIp + ":" + strconv.Itoa(int(localConf.WebPicPort)) + "/submit?collection=headpic" |
| | | logger.Debug("weedfsUri:", weedfsUri) |
| | | weedFilePath, err := WeedFSClient.UploadFile(weedfsUri, filename, fileBytes, 5*time.Second) |
| | | if err != nil { |
| | | logger.Debug("WeedFSClient.UploadFile err:", err, filename) |
| | | return "", errors.New("WeedFSClient.UploadFile err") |
| | | } |
| | | return weedFilePath, nil |
| | | } |
| | | |
| | | //更新头像、昵称 |
| | | func (sv UserService) UpdateProfile(userEditVo *vo.UserEditVo) bool { |
| | | var userE models.SysUser |
| | | rows, e1 := userE.SelectById(userEditVo.Id) |
| | | if e1 == nil && rows > 0 { |
| | | var err error |
| | | tx := models.GetDB().Begin() |
| | | defer func() { |
| | | if err != nil && tx != nil { |
| | | tx.Rollback() |
| | | } |
| | | }() |
| | | if userEditVo.HeadPic != "" { |
| | | err = tx.Exec("update sys_user set headpic=? where id=?", userEditVo.HeadPic, userEditVo.Id).Error |
| | | if err != nil { |
| | | return false |
| | | } |
| | | } |
| | | if userEditVo.BackgroundPic != "" { |
| | | err = tx.Exec("update sys_user set backgroundpic = ? where id = ?", userEditVo.BackgroundPic, userEditVo.Id).Error |
| | | if err != nil { |
| | | return false |
| | | } |
| | | } |
| | | if userEditVo.IconType != 0 { |
| | | err = tx.Exec("update sys_user set useIconType = ? where id = ?", userEditVo.IconType, userEditVo.Id).Error |
| | | if err != nil { |
| | | return false |
| | | } |
| | | } |
| | | if userEditVo.Nickname != "" { |
| | | err = tx.Exec("update sys_user set nickname=? where id=?", userEditVo.Nickname, userEditVo.Id).Error |
| | | if err != nil { |
| | | return false |
| | | } |
| | | } |
| | | if userEditVo.NewPwd != "" { |
| | | uppwd, err := util.Encrypt(userEditVo.NewPwd) |
| | | if nil == err { |
| | | err = tx.Exec("update sys_user set password=? where id=?", uppwd, userEditVo.Id).Error |
| | | if err != nil { |
| | | return false |
| | | } |
| | | } else { |
| | | return false |
| | | } |
| | | } |
| | | tx.Commit() |
| | | return true |
| | | } |
| | | return false |
| | | } |
| | | |
| | | func (sv UserService) GetRoles(useId string) ([]models.SysRole, error) { |
| | | var roleE models.SysRole |
| | | roles := roleE.FindByUserId(useId) |
| | | tempList, err := roleE.FindAll() |
| | | if nil != err { |
| | | return tempList, err |
| | | } |
| | | var res = make([]models.SysRole, 1) |
| | | for _, role := range tempList { |
| | | if roles[0].Name == "管理员" { |
| | | if role.Name == "普通用户" { |
| | | res[0] = role |
| | | } |
| | | } else if "超级管理员" == roles[0].Name && role.Name != "超级管理员" { |
| | | if role.Name == "管理员" { |
| | | res[0] = role |
| | | } else { |
| | | res = append(res, role) |
| | | } |
| | | } |
| | | } |
| | | return res, nil |
| | | } |
| | | |
| | | func (sv UserService) GetProfile(uid string) (loginAppUser vo.LoginAppUser) { |
| | | var userE models.SysUser |
| | | rows, err := userE.SelectById(uid) |
| | | fmt.Println("user icon type is :", userE.UseIconType) |
| | | if err != nil || rows == 0 { |
| | | return loginAppUser |
| | | } |
| | | user2LoginAppUser(&userE, &loginAppUser) |
| | | var roleE models.SysRole |
| | | roles := roleE.FindByUserId(userE.Id) |
| | | loginAppUser.SysRoles = roles |
| | | if len(roles) > 0 { |
| | | loginAppUser.RoleName = roles[0].Name |
| | | } |
| | | loginAppUser.HeadPic = userE.HeadPic |
| | | loginAppUser.BackgroundPic = userE.BackgroundPic |
| | | // loginAppUser.UseIconType = userE.UseIconType |
| | | fmt.Println("loginAppUser icon type is :", loginAppUser.UseIconType) |
| | | return loginAppUser |
| | | } |
| | | package service
|
| | |
|
| | | import (
|
| | | "errors"
|
| | | "fmt"
|
| | | "path"
|
| | | "strconv"
|
| | | "strings"
|
| | | "time"
|
| | | "vamicro/extend/util"
|
| | | "vamicro/system-service/models"
|
| | | "vamicro/system-service/vo"
|
| | |
|
| | | "basic.com/fileServer/WeedFSClient.git"
|
| | | "basic.com/valib/bhomedbapi.git"
|
| | | "basic.com/valib/logger.git"
|
| | | uuid "github.com/satori/go.uuid"
|
| | | )
|
| | |
|
| | | type UserService struct {
|
| | | }
|
| | |
|
| | | func (sv UserService) Login(loginVo vo.UserVo) (flag bool, loginAppUser vo.LoginAppUser) {
|
| | | if loginVo.UserName == "" || loginVo.Password == "" {
|
| | | return false, loginAppUser
|
| | | }
|
| | | /*if AuthInfo.ExpirationTime < time.Now().Unix() {
|
| | | loginAppUser.RoleName = "未授权用户"
|
| | | return false,loginAppUser
|
| | | }*/
|
| | | var userE models.SysUser
|
| | | rows, err := userE.FindByName(loginVo.UserName)
|
| | | if err != nil || rows == 0 {
|
| | | return false, loginAppUser
|
| | | }
|
| | | if pwdStr, err := util.Encrypt(loginVo.Password); err == nil && pwdStr == userE.Password {
|
| | | user2LoginAppUser(&userE, &loginAppUser)
|
| | | var roleE models.SysRole
|
| | | roles := roleE.FindByUserId(userE.Id)
|
| | | loginAppUser.SysRoles = roles
|
| | | if len(roles) > 0 {
|
| | | loginAppUser.RoleName = roles[0].Name
|
| | | }
|
| | | loginAppUser.HeadPic = userE.HeadPic
|
| | | return true, loginAppUser
|
| | | }
|
| | | return false, loginAppUser
|
| | | }
|
| | |
|
| | | func user2LoginAppUser(userE *models.SysUser, loginAppUser *vo.LoginAppUser) {
|
| | | loginAppUser.Id = userE.Id
|
| | | loginAppUser.Username = userE.Username
|
| | | loginAppUser.Nickname = userE.Nickname
|
| | | loginAppUser.HeadPic = userE.HeadPic
|
| | | loginAppUser.BackgroundPic = userE.BackgroundPic
|
| | | loginAppUser.UseIconType = userE.UseIconType
|
| | |
|
| | | permissions := make([]string, 0)
|
| | | pM := make(map[string]models.SysMenu, 0)
|
| | | var roleE models.SysRole
|
| | | var menuE models.SysMenu
|
| | | var srm models.SysRoleMenu
|
| | | var sum models.SysUserMenu
|
| | | allMenus := menuE.FindAll()
|
| | | roles := roleE.FindByUserId(userE.Id) //用户角色
|
| | | loginAppUser.SysRoles = roles
|
| | |
|
| | | if roles != nil && allMenus != nil {
|
| | | menuMap := make(map[string]models.SysMenu, 0)
|
| | | for _, menuE := range allMenus {
|
| | | menuMap[menuE.Id] = menuE
|
| | | }
|
| | | var userMenus []vo.SysMenuVo
|
| | | if len(roles) > 0 && roles[0].Name == "超级管理员" {
|
| | | for _, menuModel := range menuMap {
|
| | | userMenus = append(userMenus, vo.SysMenuVo{
|
| | | SysMenu: menuModel,
|
| | | })
|
| | | pM[menuModel.Id] = menuModel
|
| | | }
|
| | |
|
| | | } else {
|
| | | sumList, _ := sum.FindByRoleId(userE.Id)
|
| | | if nil != sumList && len(sumList) > 0 {
|
| | | for _, srmE := range sumList {
|
| | | if _, ok := pM[srmE.MenuId]; !ok {
|
| | | menuModel := menuMap[srmE.MenuId]
|
| | | pM[menuModel.Id] = menuModel
|
| | |
|
| | | pidArr := strings.Split(menuModel.ParentIds, ",")
|
| | | for _, pid := range pidArr {
|
| | | if pid != "" && pid != "0" {
|
| | | if _, k := pM[pid]; !k {
|
| | | pM[pid] = menuMap[pid]
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | userMenus = append(userMenus, vo.SysMenuVo{
|
| | | SysMenu: menuModel,
|
| | | })
|
| | | }
|
| | | }
|
| | | } else {
|
| | | for _, role := range roles {
|
| | | srmList, _ := srm.FindByRoleId(role.Id)
|
| | | if srmList != nil {
|
| | | //var userMenus []vo.SysMenuVo
|
| | | for _, srmE := range srmList {
|
| | | if _, ok := pM[srmE.MenuId]; !ok {
|
| | | menuModel := menuMap[srmE.MenuId]
|
| | | pM[menuModel.Id] = menuModel
|
| | |
|
| | | pidArr := strings.Split(menuModel.ParentIds, ",")
|
| | | for _, pid := range pidArr {
|
| | | if pid != "" && pid != "0" {
|
| | | if _, k := pM[pid]; !k {
|
| | | pM[pid] = menuMap[pid]
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | userMenus = append(userMenus, vo.SysMenuVo{
|
| | | SysMenu: menuModel,
|
| | | })
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | loginAppUser.SysMenus = userMenus
|
| | |
|
| | | }
|
| | | for _, v := range pM {
|
| | | permissions = append(permissions, v.Permission)
|
| | | }
|
| | | loginAppUser.Permissions = permissions
|
| | | logger.Debug("permissions:", permissions)
|
| | | }
|
| | |
|
| | | func (sv UserService) UpdatePwd(userId string, oldPwd string, newPwd string, opUserId string) (bool, error) {
|
| | | var userE models.SysUser
|
| | | rows, err := userE.SelectById(userId)
|
| | | if err != nil || rows == 0 {
|
| | | return false, errors.New("用户未找到!")
|
| | | }
|
| | | if oldPwd != "" {
|
| | | if encryOldPwd, _ := util.Encrypt(oldPwd); encryOldPwd == userE.Password { //旧密码匹配
|
| | | encryNewPwd, err := util.Encrypt(newPwd)
|
| | | if err == nil {
|
| | | return userE.UpdatePwd(userId, encryNewPwd), nil
|
| | | } else {
|
| | | return false, err
|
| | | }
|
| | | } else {
|
| | | return false, errors.New("原密码不正确!")
|
| | | }
|
| | | } else {
|
| | | var roleE models.SysRole
|
| | | roles := roleE.FindByUserId(userE.Id) //用户角色
|
| | | opRoles := roleE.FindByUserId(opUserId)
|
| | | if len(roles) > 0 && roles[0].Name == "超级管理员" {
|
| | | return false, errors.New("您没有权限修改超级管理员的密码!")
|
| | | }
|
| | | if len(roles) > 0 && roles[0].Name == "管理员" {
|
| | | if len(opRoles) < 0 || opRoles[0].Name != "超级管理员" {
|
| | | return false, errors.New("您没有权限修改管理员的密码!")
|
| | | }
|
| | | }
|
| | | if len(roles) > 0 && roles[0].Name == "普通用户" {
|
| | | if len(opRoles) < 0 || opRoles[0].Name != "超级管理员" && opRoles[0].Name != "管理员" {
|
| | | return false, errors.New("您没有权限修改普通用户的密码!")
|
| | | }
|
| | | }
|
| | | encryNewPwd, err := util.Encrypt(newPwd)
|
| | | if err == nil {
|
| | | return userE.UpdatePwd(userId, encryNewPwd), nil
|
| | | } else {
|
| | | return false, err
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | func (sv UserService) AddUser(userVo vo.UserVo) (bool, string) {
|
| | | var userE models.SysUser
|
| | | var userR models.SysRole
|
| | | rows, err := userE.FindByName(userVo.UserName)
|
| | | if err != nil {
|
| | | return false, ""
|
| | | }
|
| | | if rows > 0 {
|
| | | return false, "用户名已存在"
|
| | | } else {
|
| | | if len([]byte(userVo.Password)) < 6 {
|
| | | return false, "密码长度不能小于6位"
|
| | | }
|
| | | pwdStr, err := util.Encrypt(userVo.Password)
|
| | | if err != nil {
|
| | | return false, "添加失败"
|
| | | }
|
| | | addModel := models.SysUser{
|
| | | Username: userVo.UserName,
|
| | | Password: pwdStr,
|
| | | Nickname: userVo.Nickname,
|
| | | HeadPic: userVo.HeadPic,
|
| | | BackgroundPic: models.DefaultBgPic,
|
| | | }
|
| | | if flag, err := addModel.Insert(); flag && err == nil {
|
| | | if "" == userVo.RoleId {
|
| | | _, err := userR.FindByName("普通用户")
|
| | | if err == nil {
|
| | | userVo.RoleId = userR.Id
|
| | | }
|
| | | }
|
| | | if "" != userVo.RoleId {
|
| | | userRole := models.SysUserRole{
|
| | | UserId: addModel.Id,
|
| | | RoleId: userVo.RoleId,
|
| | | }
|
| | | userRole.Insert()
|
| | | }
|
| | | return true, "添加成功"
|
| | | } else {
|
| | | return false, "添加失败"
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | func (sv UserService) FindAll(curUserId string) (allAppUser []vo.LoginAppUser, err error) {
|
| | | var userE models.SysUser
|
| | | rows, err := userE.SelectById(curUserId)
|
| | | if err != nil || rows == 0 {
|
| | | return nil, err
|
| | | } else {
|
| | | list, _ := userE.FindAll()
|
| | | var myself vo.LoginAppUser
|
| | | if list != nil {
|
| | | tmpList := make([]vo.LoginAppUser, 1)
|
| | | var roleE models.SysRole
|
| | | roles := roleE.FindByUserId(userE.Id)
|
| | | if roles != nil && len(roles) == 1 {
|
| | | if roles[0].Name == "超级管理员" {
|
| | | for _, u := range list {
|
| | | if u.Id == curUserId {
|
| | | user2LoginAppUser(&u, &myself)
|
| | | } else {
|
| | | var appUE vo.LoginAppUser
|
| | | user2LoginAppUser(&u, &appUE)
|
| | | tmpList = append(tmpList, appUE)
|
| | | }
|
| | | }
|
| | | } else if roles[0].Name == "管理员" {
|
| | | for _, u := range list {
|
| | | var appUE vo.LoginAppUser
|
| | | appUERoles := roleE.FindByUserId(u.Id)
|
| | | if appUERoles != nil && len(appUERoles) == 1 {
|
| | | if u.Id == curUserId {
|
| | | user2LoginAppUser(&u, &myself)
|
| | | } else if appUERoles[0].Name == "普通用户" {
|
| | | user2LoginAppUser(&u, &appUE)
|
| | | tmpList = append(tmpList, appUE)
|
| | | }
|
| | | }
|
| | | }
|
| | | } else if roles[0].Name == "普通用户" {
|
| | | for _, u := range list {
|
| | | //var appUE vo.LoginAppUser
|
| | | appUERoles := roleE.FindByUserId(u.Id)
|
| | | if appUERoles != nil && len(appUERoles) == 1 {
|
| | | if u.Id == curUserId {
|
| | | user2LoginAppUser(&u, &myself)
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | tmpList[0] = myself
|
| | | return tmpList, nil
|
| | |
|
| | | } else {
|
| | | return []vo.LoginAppUser{}, nil
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | func (sv UserService) FindByUserId(userId string) (userAuth vo.UserAuthVo, err error) {
|
| | | var userE models.SysUser
|
| | | rows, _ := userE.SelectById(userId)
|
| | | if rows > 0 {
|
| | | //userAuth.Id = userE.Id
|
| | | //userAuth.Username = userE.Username
|
| | | //userAuth.Nickname = userE.Nickname
|
| | | //userAuth.HeadPic = userE.HeadPic
|
| | |
|
| | | userAuth.SysUser = userE
|
| | |
|
| | | var appUE vo.LoginAppUser
|
| | | user2LoginAppUser(&userE, &appUE)
|
| | | userAuth.Menus = appUE.SysMenus
|
| | |
|
| | | //var roleE models.SysRole
|
| | | //var menuE models.SysMenu
|
| | | //userAuth.Menus = menuE.FindByUserId(userE.Id)
|
| | | //if nil == userAuth.Menus {
|
| | | // roles := roleE.FindByUserId(userE.Id)
|
| | | // if roles!=nil && len(roles) == 1{
|
| | | // userAuth.Menus = menuE.FindByRoleId(roles[0].Id)
|
| | | // }
|
| | | //}
|
| | |
|
| | | return userAuth, nil
|
| | | }
|
| | | return userAuth, errors.New("user not found")
|
| | | }
|
| | |
|
| | | func (sv UserService) SaveAuth(userEditVo *vo.UserEditVo, opuserId string) error {
|
| | | var userE models.SysUser
|
| | | rows, e1 := userE.SelectById(userEditVo.Id)
|
| | | if e1 == nil && rows > 0 {
|
| | | //var userTmp models.SysUser
|
| | | //userEditVo.UserName = rows[]
|
| | | //existU, e2 := userTmp.FindByName(userEditVo.UserName)
|
| | | //existU := -1
|
| | | e2 := e1
|
| | | if e2 == nil {
|
| | | /*if existU > 0 && userTmp.Id != userE.Id { //企图修改为他人的用户名
|
| | | return false
|
| | | }
|
| | | reUname := false
|
| | | if existU == 0 { //修改用户名为一个未被使用的用户名
|
| | | reUname = true
|
| | | }*/
|
| | |
|
| | | //uNewPwd, _ := util.Encrypt(userEditVo.NewPwd)
|
| | | var roleE models.SysRole
|
| | | roles := roleE.FindByUserId(userE.Id)
|
| | | if roles != nil && len(roles) == 1 {
|
| | | userRole := roles[0]
|
| | | oproles := roleE.FindByUserId(opuserId)
|
| | | if oproles[0].Name == "管理员" && userRole.Name != "普通用户" {
|
| | | return errors.New("管理员只能修改普通用户权限")
|
| | | }
|
| | | if oproles[0].Name == "普通用户" {
|
| | | return errors.New("普通用户不能修改权限")
|
| | | }
|
| | | //userRole := roles[0]
|
| | | var err error
|
| | | tx := models.GetDB().Begin()
|
| | | defer func() {
|
| | | if err != nil && tx != nil {
|
| | | tx.Rollback()
|
| | | }
|
| | | }()
|
| | | /*if reUname && userRole.Name == "普通用户" { //只有普通用户才允许修改用户名
|
| | | err = tx.Exec("update sys_user set username=? where id=?", userEditVo.UserName, userEditVo.Id).Error
|
| | | if err !=nil {
|
| | | return false
|
| | | }
|
| | | }
|
| | | if userEditVo.NewPwd !="" {//如果密码不为空,则修改密码
|
| | | err = tx.Exec("update sys_user set password=? where id=?",uNewPwd,userEditVo.Id).Error
|
| | | if err !=nil {
|
| | | return false
|
| | | }
|
| | | }*/
|
| | |
|
| | | //处理当前用户权限
|
| | | err = tx.Exec("delete from sys_user_menu where user_id=?", userE.Id).Error
|
| | | if err != nil {
|
| | | return err
|
| | | }
|
| | | for _, menuId := range userEditVo.MenuIds {
|
| | | err = tx.Exec("insert into sys_user_menu (id,user_id,menu_id) values (?,?,?)", uuid.NewV4().String(), userE.Id, menuId).Error
|
| | | if err != nil {
|
| | | return err
|
| | | }
|
| | | }
|
| | | tx.Commit()
|
| | | return nil
|
| | | } else {
|
| | | return errors.New("user role is not set")
|
| | | }
|
| | | }
|
| | | }
|
| | | return errors.New("user not found")
|
| | | }
|
| | |
|
| | | //上传头像
|
| | | func (sv UserService) UploadHeadPic(fileBytes []byte, filename string) (string, error) {
|
| | | fileExt := path.Ext(filename)
|
| | | fileExt = strings.ToLower(fileExt)
|
| | | if fileExt != ".jpg" && fileExt != ".jpeg" && fileExt != ".png" {
|
| | | return "", errors.New("pic format error")
|
| | | }
|
| | | var sApi bhomedbapi.SysSetApi
|
| | | flag, localConf := sApi.GetServerInfo()
|
| | | if !flag || localConf.AlarmIp == "" || localConf.AlarmPort == 0 {
|
| | | logger.Debug("localConf err")
|
| | | return "", errors.New("localConf err")
|
| | | }
|
| | |
|
| | | var weedfsUri = "http://" + localConf.WebPicIp + ":" + strconv.Itoa(int(localConf.WebPicPort)) + "/submit?collection=headpic"
|
| | | logger.Debug("weedfsUri:", weedfsUri)
|
| | | weedFilePath, err := WeedFSClient.UploadFile(weedfsUri, filename, fileBytes, 5*time.Second)
|
| | | if err != nil {
|
| | | logger.Debug("WeedFSClient.UploadFile err:", err, filename)
|
| | | return "", errors.New("WeedFSClient.UploadFile err")
|
| | | }
|
| | | return weedFilePath, nil
|
| | | }
|
| | |
|
| | | //更新头像、昵称
|
| | | func (sv UserService) UpdateProfile(userEditVo *vo.UserEditVo) bool {
|
| | | var userE models.SysUser
|
| | | rows, e1 := userE.SelectById(userEditVo.Id)
|
| | | if e1 == nil && rows > 0 {
|
| | | var err error
|
| | | tx := models.GetDB().Begin()
|
| | | defer func() {
|
| | | if err != nil && tx != nil {
|
| | | tx.Rollback()
|
| | | }
|
| | | }()
|
| | | if userEditVo.HeadPic != "" {
|
| | | err = tx.Exec("update sys_user set headpic=? where id=?", userEditVo.HeadPic, userEditVo.Id).Error
|
| | | if err != nil {
|
| | | return false
|
| | | }
|
| | | }
|
| | | if userEditVo.BackgroundPic != "" {
|
| | | err = tx.Exec("update sys_user set backgroundpic = ? where id = ?", userEditVo.BackgroundPic, userEditVo.Id).Error
|
| | | if err != nil {
|
| | | return false
|
| | | }
|
| | | }
|
| | | if userEditVo.IconType != 0 {
|
| | | err = tx.Exec("update sys_user set useIconType = ? where id = ?", userEditVo.IconType, userEditVo.Id).Error
|
| | | if err != nil {
|
| | | return false
|
| | | }
|
| | | }
|
| | | if userEditVo.Nickname != "" {
|
| | | err = tx.Exec("update sys_user set nickname=? where id=?", userEditVo.Nickname, userEditVo.Id).Error
|
| | | if err != nil {
|
| | | return false
|
| | | }
|
| | | }
|
| | | if userEditVo.NewPwd != "" {
|
| | | uppwd, err := util.Encrypt(userEditVo.NewPwd)
|
| | | if nil == err {
|
| | | err = tx.Exec("update sys_user set password=? where id=?", uppwd, userEditVo.Id).Error
|
| | | if err != nil {
|
| | | return false
|
| | | }
|
| | | } else {
|
| | | return false
|
| | | }
|
| | | }
|
| | | tx.Commit()
|
| | | return true
|
| | | }
|
| | | return false
|
| | | }
|
| | |
|
| | | func (sv UserService) GetRoles(useId string) ([]models.SysRole, error) {
|
| | | var roleE models.SysRole
|
| | | roles := roleE.FindByUserId(useId)
|
| | | tempList, err := roleE.FindAll()
|
| | | if nil != err {
|
| | | return tempList, err
|
| | | }
|
| | | var res = make([]models.SysRole, 1)
|
| | | for _, role := range tempList {
|
| | | if roles[0].Name == "管理员" {
|
| | | if role.Name == "普通用户" {
|
| | | res[0] = role
|
| | | }
|
| | | } else if "超级管理员" == roles[0].Name && role.Name != "超级管理员" {
|
| | | if role.Name == "管理员" {
|
| | | res[0] = role
|
| | | } else {
|
| | | res = append(res, role)
|
| | | }
|
| | | }
|
| | | }
|
| | | return res, nil
|
| | | }
|
| | |
|
| | | func (sv UserService) GetProfile(uid string) (loginAppUser vo.LoginAppUser) {
|
| | | var userE models.SysUser
|
| | | rows, err := userE.SelectById(uid)
|
| | | fmt.Println("user icon type is :", userE.UseIconType)
|
| | | if err != nil || rows == 0 {
|
| | | return loginAppUser
|
| | | }
|
| | | user2LoginAppUser(&userE, &loginAppUser)
|
| | | var roleE models.SysRole
|
| | | roles := roleE.FindByUserId(userE.Id)
|
| | | loginAppUser.SysRoles = roles
|
| | | if len(roles) > 0 {
|
| | | loginAppUser.RoleName = roles[0].Name
|
| | | }
|
| | | loginAppUser.HeadPic = userE.HeadPic
|
| | | loginAppUser.BackgroundPic = userE.BackgroundPic
|
| | | // loginAppUser.UseIconType = userE.UseIconType
|
| | | fmt.Println("loginAppUser icon type is :", loginAppUser.UseIconType)
|
| | | return loginAppUser
|
| | | }
|