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