| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- package token
-
- import (
- "context"
- "fmt"
-
- "git.x2erp.com/qdy/go-base/config"
- "git.x2erp.com/qdy/go-base/ctx"
- "git.x2erp.com/qdy/go-base/logger"
- "git.x2erp.com/qdy/go-base/model/request/configreq"
- "git.x2erp.com/qdy/go-base/model/response"
- "git.x2erp.com/qdy/go-base/util"
- "git.x2erp.com/qdy/go-base/util/jwt"
- "git.x2erp.com/qdy/go-db/factory/database"
- "git.x2erp.com/qdy/go-svc-configure/internal/service/dao"
- )
-
- // CreateConfigureToken 用户为自己创建token(需要TokenAuth认证)
- func CreateConfigureToken(tokenRequest *configreq.ConfigTokenRequest, ctx context.Context, dbFactory *database.DBFactory, reqCtx *ctx.RequestContext) *response.QueryResult[string] {
- logger.Debug("CreateConfigureToken-开始创建用户token")
-
- // 获取当前用户信息
- currentUserID := reqCtx.UserID
- currentTenantID := reqCtx.TenantID
-
- if currentUserID == "" || currentTenantID == "" {
- logger.ErrorC(reqCtx, "用户身份信息不完整")
- return util.CreateErrorResult[string]("用户身份信息不完整", reqCtx)
- }
-
- db := dbFactory.GetDB()
-
- // 验证当前用户是否存在
- userExists, err := dao.CheckUserExists(ctx, db, currentUserID, currentTenantID)
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("检查用户存在性失败: %v", err))
- return util.CreateErrorResult[string](fmt.Sprintf("检查用户存在性失败: %v", err), reqCtx)
- }
-
- if !userExists {
- logger.ErrorC(reqCtx, "当前用户不存在")
- return util.CreateErrorResult[string]("当前用户不存在", reqCtx)
- }
-
- // 获取用户详细信息
- user, err := dao.GetUserByUserID(ctx, db, currentUserID, currentTenantID)
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("获取用户信息失败: %v", err))
- return util.CreateErrorResult[string](fmt.Sprintf("获取用户信息失败: %v", err), reqCtx)
- }
-
- // 获取用户角色列表
- roles, err := dao.GetUserRoles(ctx, db, currentUserID, currentTenantID)
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("获取用户角色失败: %v", err))
- // 继续处理,角色可能为空
- roles = []string{}
- }
-
- // 生成JWT token
- claims := &jwt.Claims{
- UserID: user.UserID,
- Username: user.Name,
- TenantID: user.TenantID,
- ProjectID: tokenRequest.ProjectID, // 使用请求中的项目ID
- Extra: map[string]interface{}{
- "roles": roles,
- "mobile": user.Mobile,
- "email": user.Email,
- },
- }
-
- secretKey := config.GetServiceConfig().SecretKey
- token, err := jwt.CreateTokenDays(claims, tokenRequest.ExpiresDays, secretKey)
-
- if err != nil {
- logger.ErrorC(reqCtx, fmt.Sprintf("建立token产生错误: %v", err))
- return util.CreateErrorResult[string](fmt.Sprintf("建立token产生错误: %v", err), reqCtx)
- }
-
- logger.Debug(fmt.Sprintf("建立token成功!用户: %s, 租户: %s, 角色: %v", user.UserID, user.TenantID, roles))
- return util.CreateSuccessResultData(token, reqCtx)
- }
|