Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 82f2edf

Browse files
authoredMay 17, 2025··
Merge pull request #9 from hammercode-dev/be-06/middleware-level-user
[BE-06] - Middleware Level User
2 parents 0fcba9a + 4436e4a commit 82f2edf

File tree

3 files changed

+64
-50
lines changed

3 files changed

+64
-50
lines changed
 

‎app/middlewares/auth_middleware.go

Lines changed: 58 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -8,51 +8,62 @@ import (
88
"github.com/hammer-code/lms-be/utils"
99
)
1010

11-
func (m *Middleware) AuthMiddleware(next http.Handler) http.Handler {
12-
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
13-
token := utils.ExtractBearerToken(request)
14-
if len(*token) < 5 {
15-
utils.Response(domain.HttpResponse{
16-
Code: 401,
17-
Message: "Forbidden",
18-
Data: nil,
19-
}, writer)
20-
return
21-
}
22-
23-
verifyToken, err := m.Jwt.VerifyToken(*token)
24-
if err != nil {
25-
utils.Response(domain.HttpResponse{
26-
Code: 500,
27-
Message: err.Error(),
28-
Data: nil,
29-
}, writer)
30-
return
31-
}
32-
33-
// tokenLogoutErr := m.UserRepo.ExpiredToken(request.Context(), *token)
34-
// if tokenLogoutErr == nil {
35-
// utils.Response(domain.HttpResponse{
36-
// Code: 401,
37-
// Message: "Token expired",
38-
// Data: nil,
39-
// }, writer)
40-
// return
41-
// }
42-
43-
user, err := m.UserRepo.FindByEmail(request.Context(), verifyToken.Email)
44-
if err != nil {
45-
utils.Response(domain.HttpResponse{
46-
Code: 401,
47-
Message: "Forbidden",
48-
Data: nil,
49-
}, writer)
50-
return
51-
}
52-
53-
writer.Header().Set("x-user-id", strconv.Itoa(user.ID))
54-
writer.Header().Set("x-username", user.Username)
55-
56-
next.ServeHTTP(writer, request)
57-
})
11+
func (m *Middleware) AuthMiddleware(allowedRole string) domain.MiddlewareFunc {
12+
return func(next http.Handler) http.Handler {
13+
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
14+
token := utils.ExtractBearerToken(request)
15+
if len(*token) < 5 {
16+
utils.Response(domain.HttpResponse{
17+
Code: 401,
18+
Message: "Unauthorized",
19+
Data: nil,
20+
}, writer)
21+
return
22+
}
23+
24+
verifyToken, err := m.Jwt.VerifyToken(*token)
25+
if err != nil {
26+
utils.Response(domain.HttpResponse{
27+
Code: 500,
28+
Message: "failed to verify token",
29+
Data: nil,
30+
}, writer)
31+
return
32+
}
33+
34+
// tokenLogoutErr := m.UserRepo.ExpiredToken(request.Context(), *token)
35+
// if tokenLogoutErr == nil {
36+
// utils.Response(domain.HttpResponse{
37+
// Code: 401,
38+
// Message: "Token expired",
39+
// Data: nil,
40+
// }, writer)
41+
// return
42+
// }
43+
44+
user, err := m.UserRepo.FindByEmail(request.Context(), verifyToken.Email)
45+
if err != nil {
46+
utils.Response(domain.HttpResponse{
47+
Code: 401,
48+
Message: "Unauthorized",
49+
Data: nil,
50+
}, writer)
51+
return
52+
}
53+
54+
if user.Role != allowedRole {
55+
utils.Response(domain.HttpResponse{
56+
Code: 401,
57+
Message: "Unauthorized",
58+
Data: nil,
59+
}, writer)
60+
return
61+
}
62+
63+
writer.Header().Set("x-user-id", strconv.Itoa(user.ID))
64+
writer.Header().Set("x-username", user.Username)
65+
66+
next.ServeHTTP(writer, request)
67+
})
68+
}
5869
}

‎cmd/serve_http.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212

1313
"github.com/hammer-code/lms-be/app"
1414
"github.com/hammer-code/lms-be/config"
15+
"github.com/hammer-code/lms-be/constants"
1516
_ "github.com/hammer-code/lms-be/docs"
1617
"github.com/hammer-code/lms-be/domain"
1718
"github.com/hammer-code/lms-be/utils"
@@ -136,10 +137,10 @@ func registerHandler(app app.App) *mux.Router {
136137
public.HandleFunc("/events/pay", app.EventHandler.PayEvent).Methods(http.MethodPost)
137138

138139
protectedV1Route := v1.NewRoute().Subrouter()
139-
protectedV1Route.Use(app.Middleware.AuthMiddleware)
140+
protectedV1Route.Use(app.Middleware.AuthMiddleware(constants.RoleUser))
140141

141142
protectedV1AdminRoute := v1.PathPrefix("/admin").Subrouter()
142-
protectedV1AdminRoute.Use(app.Middleware.AuthMiddleware)
143+
protectedV1AdminRoute.Use(app.Middleware.AuthMiddleware(constants.RoleAdmin))
143144

144145
protectedV1Route.HandleFunc("/users", app.UserHandler.GetUsers).Methods(http.MethodGet)
145146
protectedV1Route.HandleFunc("/user", app.UserHandler.GetUserProfile).Methods(http.MethodGet)

‎domain/middleware.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package domain
33
import "net/http"
44

55
type Middleware interface {
6-
AuthMiddleware(next http.Handler) http.Handler
6+
AuthMiddleware(allowedRole string) MiddlewareFunc
77
LogMiddleware(next http.Handler) http.Handler
88
}
9+
10+
type MiddlewareFunc = func (http.Handler) http.Handler

0 commit comments

Comments
 (0)
Please sign in to comment.