Feat: edit/add users

pull/247/head
HFO4 4 years ago
parent 38161250e8
commit 19c70f8cfc

@ -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))
}
}

@ -369,6 +369,10 @@ func InitMasterRouter() *gin.Engine {
{
// 列出用户
user.POST("list", controllers.AdminListUser)
// 获取用户
user.GET(":id", controllers.AdminGetUser)
// 创建/保存用户
user.POST("", controllers.AdminAddUser)
}
}

@ -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)

Loading…
Cancel
Save