32 lines
618 B
Go
Raw Permalink Normal View History

package middleware
import (
"github.com/gin-gonic/gin"
"github.com/muyuqingfeng/iloom/shared/pkg/response"
)
func RoleRequired(roles ...string) gin.HandlerFunc {
allowed := make(map[string]bool, len(roles))
for _, r := range roles {
allowed[r] = true
}
return func(c *gin.Context) {
role, exists := c.Get("role")
if !exists {
response.Forbidden(c, "role not found in context")
c.Abort()
return
}
roleStr, ok := role.(string)
if !ok || !allowed[roleStr] {
response.Error(c, 403, response.ErrCodeRoleMismatch, "insufficient role permission")
c.Abort()
return
}
c.Next()
}
}