added fetching of role_id

This commit is contained in:
2025-12-18 10:25:04 +08:00
parent 8c67cd38e7
commit ee45b546a3
3 changed files with 43 additions and 4 deletions
+21 -4
View File
@@ -52,6 +52,10 @@ func GenerateTokens(email, userAgent, ipAddress string) (string, string, error)
userID = helper.UUIDGenerator()
}
roleID, err := services.GetRoleIDFromEmail(email)
if err != nil {
return "", "", fmt.Errorf("error checking role in database: %w", err)
}
sessionID := helper.UUIDGenerator()
refreshToken, err := generateSecureToken()
@@ -107,7 +111,7 @@ func GenerateTokens(email, userAgent, ipAddress string) (string, string, error)
}
}
accessToken, err := generateAccessToken(email, sessionID, userID)
accessToken, err := generateAccessToken(email, sessionID, userID, roleID)
if err != nil {
return "", "", fmt.Errorf(errFormatWithContext, errMsgFailedToGenerateAccessToken, err)
}
@@ -116,7 +120,7 @@ func GenerateTokens(email, userAgent, ipAddress string) (string, string, error)
return accessToken, refreshToken, nil
}
func generateAccessToken(email, sessionID, userID string) (string, error) {
func generateAccessToken(email, sessionID, userID, roleID string) (string, error) {
AccessTokenExpiration := os.Getenv("ACCESS_TOKEN_EXPIRATION_MINUTES")
if AccessTokenExpiration == "" {
log.Println("AccessTokenExpiration not set (in minutes), defaulting to 45 minutes")
@@ -128,6 +132,7 @@ func generateAccessToken(email, sessionID, userID string) (string, error) {
claims := &models.AccessToken{
Email: email,
UserID: userID,
RoleID: roleID,
SessionID: sessionID,
Exp: expirationTime,
RegisteredClaims: jwt.RegisteredClaims{
@@ -269,7 +274,13 @@ func RefreshAccessToken(refreshTokenString, userAgent, ipAddress string) (string
userID = session.UserID // Fallback to session's user ID
}
accessToken, err := generateAccessToken(email, session.ID, userID)
roleID, err := services.GetRoleIDFromEmail(email)
if err != nil {
helper.LogError(err, fmt.Sprintf("Failed to fetch role ID for email %s during refresh", email))
roleID = ""
}
accessToken, err := generateAccessToken(email, session.ID, userID, roleID)
if err != nil {
helper.LogError(err, "Failed to generate access token during refresh")
return "", fmt.Errorf("failed to generate access token: %w", err)
@@ -414,7 +425,13 @@ func RefreshAccessTokenWithEmailFallback(refreshTokenString, userAgent, ipAddres
userID = session.UserID // Fallback to session's user ID
}
accessToken, err := generateAccessToken(email, session.ID, userID)
roleID, err := services.GetRoleIDFromEmail(email)
if err != nil {
helper.LogError(err, fmt.Sprintf("Failed to fetch role ID for email %s during refresh", email))
roleID = ""
}
accessToken, err := generateAccessToken(email, session.ID, userID, roleID)
if err != nil {
helper.LogError(err, "Failed to generate access token during refresh")
return "", fmt.Errorf("failed to generate access token: %w", err)
+1
View File
@@ -9,6 +9,7 @@ import (
type AccessToken struct {
Email string `json:"email"`
UserID string `json:"user_id"`
RoleID string `json:"role_id"`
SessionID string `json:"session_id"`
Exp int64 `json:"exp"`
jwt.RegisteredClaims
+21
View File
@@ -64,3 +64,24 @@ func GetUserIDFromEmail(email string) (string, error) {
return id, nil
}
func GetRoleIDFromEmail(email string) (string, error) {
log.Print(email)
query := `SELECT role_id
FROM (
SELECT r.id AS role_id, 1 AS priority
FROM roles r
JOIN users u ON u.role_id = r.id
WHERE u.email_address = ?
AND u.is_deleted = 0
) t
ORDER BY priority ASC
LIMIT 1;
`
var roleID string
err := db.DB.QueryRow(query, email).Scan(&roleID)
if err != nil {
return "", err
}
return roleID, nil
}