mirror of https://github.com/cloudreve/Cloudreve
Feat: edit/add users
parent
38161250e8
commit
19c70f8cfc
|
@ -282,3 +282,25 @@ func AdminListUser(c *gin.Context) {
|
||||||
c.JSON(200, ErrorResponse(err))
|
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.POST("list", controllers.AdminListUser)
|
||||||
|
// 获取用户
|
||||||
|
user.GET(":id", controllers.AdminGetUser)
|
||||||
|
// 创建/保存用户
|
||||||
|
user.POST("", controllers.AdminAddUser)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,64 @@ package admin
|
||||||
import (
|
import (
|
||||||
model "github.com/HFO4/cloudreve/models"
|
model "github.com/HFO4/cloudreve/models"
|
||||||
"github.com/HFO4/cloudreve/pkg/serializer"
|
"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 列出用户
|
// Users 列出用户
|
||||||
func (service *AdminListService) Users() serializer.Response {
|
func (service *AdminListService) Users() serializer.Response {
|
||||||
var res []model.User
|
var res []model.User
|
||||||
|
@ -19,6 +75,15 @@ func (service *AdminListService) Users() serializer.Response {
|
||||||
tx = tx.Where(k+" = ?", v)
|
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)
|
tx.Count(&total)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue