78b57273e2
- Add password hashing with bcrypt - Add AuthService with proper login - Add password strength validation - Add RBAC middleware (AdminOnly, ManagerOrAdmin) - Add tenant isolation middleware - Update CRM handler with tenant filtering - Add JWT fallback for development mode - Add user context helpers - Build successful
44 lines
1.0 KiB
Go
44 lines
1.0 KiB
Go
package middleware
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"boc/auth"
|
|
)
|
|
|
|
// TenantContextKey är nyckeln för tenant_id i context
|
|
type TenantContextKey struct{}
|
|
|
|
// GetTenantID hämtar tenant_id från användarens claims
|
|
func GetTenantID(ctx context.Context) string {
|
|
claims, ok := auth.FromContext(ctx)
|
|
if !ok {
|
|
return ""
|
|
}
|
|
return claims.OrgID
|
|
}
|
|
|
|
// TenantIsolation middleware lägger till tenant_id i context
|
|
func TenantIsolation(next http.Handler) http.Handler {
|
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
tenantID := GetTenantID(r.Context())
|
|
if tenantID == "" {
|
|
// Om ingen tenant finns, använd default
|
|
tenantID = "11111111-1111-1111-1111-111111111111"
|
|
}
|
|
|
|
ctx := context.WithValue(r.Context(), TenantContextKey{}, tenantID)
|
|
next.ServeHTTP(w, r.WithContext(ctx))
|
|
})
|
|
}
|
|
|
|
// GetTenantFromContext hämtar tenant_id från context
|
|
func GetTenantFromContext(ctx context.Context) string {
|
|
tenantID, ok := ctx.Value(TenantContextKey{}).(string)
|
|
if !ok {
|
|
return ""
|
|
}
|
|
return tenantID
|
|
}
|