任务三
This commit is contained in:
parent
a017d93dbf
commit
a01fecdc11
|
|
@ -3,6 +3,7 @@ package system
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"kra/internal/biz/system"
|
"kra/internal/biz/system"
|
||||||
"kra/internal/server/middleware"
|
"kra/internal/server/middleware"
|
||||||
|
|
@ -224,7 +225,14 @@ type SetUserInfoRequest struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetUserInfo 设置用户信息
|
// 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{
|
user := &system.User{
|
||||||
ID: req.ID,
|
ID: req.ID,
|
||||||
NickName: req.NickName,
|
NickName: req.NickName,
|
||||||
|
|
@ -275,9 +283,35 @@ type SetUserAuthorityRequest struct {
|
||||||
AuthorityId uint `json:"authorityId"`
|
AuthorityId uint `json:"authorityId"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetUserAuthority 设置用户角色(切换角色)
|
// SetUserAuthorityResponse 设置用户角色响应
|
||||||
func (s *UserService) SetUserAuthority(ctx context.Context, userID uint, req *SetUserAuthorityRequest) error {
|
type SetUserAuthorityResponse struct {
|
||||||
return s.uc.SetUserAuthority(ctx, userID, req.AuthorityId)
|
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 设置用户多角色请求
|
// SetUserAuthoritiesRequest 设置用户多角色请求
|
||||||
|
|
@ -455,7 +489,11 @@ func (s *UserService) handleSetUserInfo(ctx http.Context) error {
|
||||||
if err := ctx.Bind(&req); err != nil {
|
if err := ctx.Bind(&req); err != nil {
|
||||||
return err
|
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 err
|
||||||
}
|
}
|
||||||
return ctx.Result(200, map[string]any{
|
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 {
|
if err := ctx.Bind(&req); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
userID := middleware.GetUserID(ctx)
|
claims, ok := middleware.GetClaims(ctx)
|
||||||
if userID == 0 {
|
if !ok {
|
||||||
return errors.Unauthorized("UNAUTHORIZED", "请先登录")
|
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
|
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{
|
return ctx.Result(200, map[string]any{
|
||||||
"code": 0,
|
"code": 0,
|
||||||
"msg": "修改成功",
|
"msg": "修改成功",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue