first commit
Made-with: Cursor
This commit is contained in:
64
internal/middleware/context.go
Normal file
64
internal/middleware/context.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type contextKey string
|
||||
|
||||
const (
|
||||
userIDKey contextKey = "user_id"
|
||||
authMethodKey contextKey = "auth_method"
|
||||
scopesKey contextKey = "scopes"
|
||||
)
|
||||
|
||||
type Scopes map[string][]string
|
||||
|
||||
func SetUserID(ctx context.Context, id uuid.UUID) context.Context {
|
||||
return context.WithValue(ctx, userIDKey, id)
|
||||
}
|
||||
|
||||
func GetUserID(ctx context.Context) (uuid.UUID, bool) {
|
||||
id, ok := ctx.Value(userIDKey).(uuid.UUID)
|
||||
return id, ok
|
||||
}
|
||||
|
||||
func SetAuthMethod(ctx context.Context, method string) context.Context {
|
||||
return context.WithValue(ctx, authMethodKey, method)
|
||||
}
|
||||
|
||||
func GetAuthMethod(ctx context.Context) string {
|
||||
m, _ := ctx.Value(authMethodKey).(string)
|
||||
return m
|
||||
}
|
||||
|
||||
func SetScopes(ctx context.Context, scopes Scopes) context.Context {
|
||||
return context.WithValue(ctx, scopesKey, scopes)
|
||||
}
|
||||
|
||||
func GetScopes(ctx context.Context) Scopes {
|
||||
s, _ := ctx.Value(scopesKey).(Scopes)
|
||||
return s
|
||||
}
|
||||
|
||||
func HasScope(ctx context.Context, resource, action string) bool {
|
||||
if GetAuthMethod(ctx) == "jwt" {
|
||||
return true
|
||||
}
|
||||
scopes := GetScopes(ctx)
|
||||
if scopes == nil {
|
||||
return false
|
||||
}
|
||||
actions, ok := scopes[resource]
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
for _, a := range actions {
|
||||
if a == action {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user