From 19c70f8cfc1f107d70f574d076b00b5b460b9dc2 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Sun, 8 Mar 2020 10:49:34 +0800 Subject: [PATCH] Feat: edit/add users --- routers/controllers/admin.go | 22 ++++++++++++ routers/router.go | 4 +++ service/admin/user.go | 65 ++++++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+) diff --git a/routers/controllers/admin.go b/routers/controllers/admin.go index a5010a1..f19ec50 100644 --- a/routers/controllers/admin.go +++ b/routers/controllers/admin.go @@ -282,3 +282,25 @@ func AdminListUser(c *gin.Context) { c.JSON(200, ErrorResponse(err)) } } + +// AdminAddUser 新建用户组 +func AdminAddUser(c *gin.Context) { + var service admin.AddUserService + if err := c.ShouldBindJSON(&service); err == nil { + res := service.Add() + c.JSON(200, res) + } else { + c.JSON(200, ErrorResponse(err)) + } +} + +// AdminGetUser 获取用户详情 +func AdminGetUser(c *gin.Context) { + var service admin.UserService + if err := c.ShouldBindUri(&service); err == nil { + res := service.Get() + c.JSON(200, res) + } else { + c.JSON(200, ErrorResponse(err)) + } +} diff --git a/routers/router.go b/routers/router.go index 2d5669a..408cda8 100644 --- a/routers/router.go +++ b/routers/router.go @@ -369,6 +369,10 @@ func InitMasterRouter() *gin.Engine { { // 列出用户 user.POST("list", controllers.AdminListUser) + // 获取用户 + user.GET(":id", controllers.AdminGetUser) + // 创建/保存用户 + user.POST("", controllers.AdminAddUser) } } diff --git a/service/admin/user.go b/service/admin/user.go index 768355f..5f1dc1d 100644 --- a/service/admin/user.go +++ b/service/admin/user.go @@ -3,8 +3,64 @@ package admin import ( model "github.com/HFO4/cloudreve/models" "github.com/HFO4/cloudreve/pkg/serializer" + "strings" ) +// AddUserService 用户添加服务 +type AddUserService struct { + User model.User `json:"User" binding:"required"` + Password string `json:"password"` +} + +// UserService 用户ID服务 +type UserService struct { + ID uint `uri:"id" json:"id" binding:"required"` +} + +// Get 获取用户详情 +func (service *UserService) Get() serializer.Response { + group, err := model.GetUserByID(service.ID) + if err != nil { + return serializer.Err(serializer.CodeNotFound, "用户不存在", err) + } + + return serializer.Response{Data: group} +} + +// Add 添加用户 +func (service *AddUserService) Add() serializer.Response { + if service.User.ID > 0 { + + user, _ := model.GetUserByID(service.User.ID) + if service.Password != "" { + user.SetPassword(service.Password) + } + + // 只更新必要字段 + user.Nick = service.User.Nick + user.Email = service.User.Email + user.GroupID = service.User.GroupID + user.Status = service.User.Status + user.Score = service.User.Score + + // 检查愚蠢操作 + if user.ID == 1 && user.GroupID != 1 { + return serializer.ParamErr("无法更改初始用户的用户组", nil) + } + + if err := model.DB.Save(&user).Error; err != nil { + return serializer.ParamErr("用户保存失败", err) + } + } else { + service.User.SetPassword(service.Password) + if err := model.DB.Create(&service.User).Error; err != nil { + return serializer.ParamErr("用户组添加失败", err) + } + } + + return serializer.Response{Data: service.User.ID} +} + // Users 列出用户 func (service *AdminListService) Users() serializer.Response { var res []model.User @@ -19,6 +75,15 @@ func (service *AdminListService) Users() serializer.Response { tx = tx.Where(k+" = ?", v) } + if len(service.Searches) > 0 { + search := "" + for k, v := range service.Searches { + search += (k + " like '%" + v + "%' OR ") + } + search = strings.TrimSuffix(search, " OR ") + tx = tx.Where(search) + } + // 计算总数用于分页 tx.Count(&total)