任务三
This commit is contained in:
parent
a017d93dbf
commit
a01fecdc11
|
|
@ -3,6 +3,7 @@ package system
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
|
||||
"kra/internal/biz/system"
|
||||
"kra/internal/server/middleware"
|
||||
|
|
@ -224,7 +225,14 @@ type SetUserInfoRequest struct {
|
|||
}
|
||||
|
||||
// SetUserInfo 设置用户信息
|
||||
func (s *UserService) SetUserInfo(ctx context.Context, req *SetUserInfoRequest) error {
|
||||
func (s *UserService) SetUserInfo(ctx context.Context, adminAuthorityID uint, req *SetUserInfoRequest) error {
|
||||
// 如果提供了AuthorityIds,先设置用户角色(与GVA保持一致)
|
||||
if len(req.AuthorityIds) > 0 {
|
||||
if err := s.uc.SetUserAuthorities(ctx, adminAuthorityID, req.ID, req.AuthorityIds); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
user := &system.User{
|
||||
ID: req.ID,
|
||||
NickName: req.NickName,
|
||||
|
|
@ -275,9 +283,35 @@ type SetUserAuthorityRequest struct {
|
|||
AuthorityId uint `json:"authorityId"`
|
||||
}
|
||||
|
||||
// SetUserAuthority 设置用户角色(切换角色)
|
||||
func (s *UserService) SetUserAuthority(ctx context.Context, userID uint, req *SetUserAuthorityRequest) error {
|
||||
return s.uc.SetUserAuthority(ctx, userID, req.AuthorityId)
|
||||
// SetUserAuthorityResponse 设置用户角色响应
|
||||
type SetUserAuthorityResponse struct {
|
||||
Token string `json:"token"`
|
||||
ExpiresAt int64 `json:"expiresAt"`
|
||||
}
|
||||
|
||||
// SetUserAuthority 设置用户角色(切换角色)- 返回新token
|
||||
func (s *UserService) SetUserAuthority(ctx context.Context, userID uint, uuid string, username string, nickName string, req *SetUserAuthorityRequest) (*SetUserAuthorityResponse, error) {
|
||||
if err := s.uc.SetUserAuthority(ctx, userID, req.AuthorityId); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 生成新的JWT token(与GVA保持一致)
|
||||
claims := s.jwtPkg.CreateClaims(jwt.BaseClaims{
|
||||
UUID: uuid,
|
||||
ID: userID,
|
||||
Username: username,
|
||||
NickName: nickName,
|
||||
AuthorityID: req.AuthorityId,
|
||||
})
|
||||
token, err := s.jwtPkg.CreateToken(claims.BaseClaims)
|
||||
if err != nil {
|
||||
return nil, errors.InternalServer("TOKEN_ERROR", "生成token失败")
|
||||
}
|
||||
|
||||
return &SetUserAuthorityResponse{
|
||||
Token: token,
|
||||
ExpiresAt: claims.ExpiresAt.UnixMilli(),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// SetUserAuthoritiesRequest 设置用户多角色请求
|
||||
|
|
@ -455,7 +489,11 @@ func (s *UserService) handleSetUserInfo(ctx http.Context) error {
|
|||
if err := ctx.Bind(&req); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := s.SetUserInfo(ctx, &req); err != nil {
|
||||
adminAuthorityID := middleware.GetAuthorityID(ctx)
|
||||
if adminAuthorityID == 0 {
|
||||
return errors.Unauthorized("UNAUTHORIZED", "请先登录")
|
||||
}
|
||||
if err := s.SetUserInfo(ctx, adminAuthorityID, &req); err != nil {
|
||||
return err
|
||||
}
|
||||
return ctx.Result(200, map[string]any{
|
||||
|
|
@ -526,13 +564,17 @@ func (s *UserService) handleSetUserAuthority(ctx http.Context) error {
|
|||
if err := ctx.Bind(&req); err != nil {
|
||||
return err
|
||||
}
|
||||
userID := middleware.GetUserID(ctx)
|
||||
if userID == 0 {
|
||||
claims, ok := middleware.GetClaims(ctx)
|
||||
if !ok {
|
||||
return errors.Unauthorized("UNAUTHORIZED", "请先登录")
|
||||
}
|
||||
if err := s.SetUserAuthority(ctx, userID, &req); err != nil {
|
||||
resp, err := s.SetUserAuthority(ctx, claims.BaseClaims.ID, claims.UUID, claims.Username, claims.NickName, &req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// 设置响应头(与GVA保持一致)
|
||||
ctx.Response().Header().Set("new-token", resp.Token)
|
||||
ctx.Response().Header().Set("new-expires-at", fmt.Sprintf("%d", resp.ExpiresAt/1000))
|
||||
return ctx.Result(200, map[string]any{
|
||||
"code": 0,
|
||||
"msg": "修改成功",
|
||||
|
|
|
|||
Loading…
Reference in New Issue