新增客户端管理功能,包括创建、编辑和删除客户端的API,更新用户管理功能,添加用户创建和编辑页面,优化管理员功能,增强用户和客户端的管理体验。
This commit is contained in:
@@ -177,3 +177,72 @@ func (s *AdminService) ListClients(page, pageSize int) ([]models.Client, int64,
|
||||
err := s.db.Offset((page - 1) * pageSize).Limit(pageSize).Find(&clients).Error
|
||||
return clients, total, err
|
||||
}
|
||||
|
||||
// CreateUser 创建新用户
|
||||
func (s *AdminService) CreateUser(username, password, email string) (*models.User, error) {
|
||||
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
user := &models.User{
|
||||
Username: username,
|
||||
Password: string(hashedPassword),
|
||||
Email: email,
|
||||
IsActive: true,
|
||||
}
|
||||
|
||||
if err := s.db.Create(user).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return user, nil
|
||||
}
|
||||
|
||||
// UpdateUser 更新用户信息
|
||||
func (s *AdminService) UpdateUser(id uint, username, email string, isActive *bool) (*models.User, error) {
|
||||
user := &models.User{}
|
||||
if err := s.db.First(user, id).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if username != "" {
|
||||
user.Username = username
|
||||
}
|
||||
if email != "" {
|
||||
user.Email = email
|
||||
}
|
||||
if isActive != nil {
|
||||
user.IsActive = *isActive
|
||||
}
|
||||
|
||||
if err := s.db.Save(user).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return user, nil
|
||||
}
|
||||
|
||||
// UpdateUserPassword 更新用户密码
|
||||
func (s *AdminService) UpdateUserPassword(id uint, password string) error {
|
||||
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return s.db.Model(&models.User{}).Where("id = ?", id).Update("password", string(hashedPassword)).Error
|
||||
}
|
||||
|
||||
// DeleteUser 删除用户
|
||||
func (s *AdminService) DeleteUser(id uint) error {
|
||||
return s.db.Delete(&models.User{}, id).Error
|
||||
}
|
||||
|
||||
// GetUser 获取单个用户信息
|
||||
func (s *AdminService) GetUser(id uint) (*models.User, error) {
|
||||
user := &models.User{}
|
||||
if err := s.db.First(user, id).Error; err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return user, nil
|
||||
}
|
||||
|
||||
@@ -209,3 +209,58 @@ func generateSecureToken(length int) string {
|
||||
}
|
||||
return base64.RawURLEncoding.EncodeToString(b)
|
||||
}
|
||||
|
||||
// GetClients 获取客户端列表(分页)
|
||||
func (s *ClientService) GetClients(page, pageSize int) ([]ClientResponse, int64, error) {
|
||||
var clients []models.Client
|
||||
var total int64
|
||||
|
||||
// 获取总数
|
||||
if err := s.db.Model(&models.Client{}).Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 获取分页数据
|
||||
offset := (page - 1) * pageSize
|
||||
if err := s.db.Offset(offset).Limit(pageSize).Find(&clients).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 转换为响应格式
|
||||
responses := make([]ClientResponse, len(clients))
|
||||
for i, client := range clients {
|
||||
// 解析 JSON 字段
|
||||
var redirectURIs, grantTypes, responseTypes, scopes, contacts []string
|
||||
json.Unmarshal(client.RedirectURIs, &redirectURIs)
|
||||
json.Unmarshal(client.GrantTypes, &grantTypes)
|
||||
json.Unmarshal(client.ResponseTypes, &responseTypes)
|
||||
json.Unmarshal(client.Scopes, &scopes)
|
||||
json.Unmarshal(client.Contacts, &contacts)
|
||||
|
||||
responses[i] = ClientResponse{
|
||||
ClientID: client.ClientID,
|
||||
ClientSecret: client.ClientSecret,
|
||||
ClientIDIssuedAt: client.CreatedAt,
|
||||
RedirectURIs: redirectURIs,
|
||||
TokenEndpointAuthMethod: client.TokenEndpointAuthMethod,
|
||||
GrantTypes: grantTypes,
|
||||
ResponseTypes: responseTypes,
|
||||
ClientName: client.ClientName,
|
||||
ClientURI: client.ClientURI,
|
||||
LogoURI: client.LogoURI,
|
||||
Scope: func() string {
|
||||
if len(scopes) > 0 {
|
||||
return scopes[0]
|
||||
}
|
||||
return ""
|
||||
}(),
|
||||
Contacts: contacts,
|
||||
TosURI: client.TosURI,
|
||||
PolicyURI: client.PolicyURI,
|
||||
SoftwareID: client.SoftwareID,
|
||||
SoftwareVersion: client.SoftwareVersion,
|
||||
}
|
||||
}
|
||||
|
||||
return responses, total, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user