RBAC - доступ по ролям и разрешениям (роль имеет набор прав). В Go: middleware извлекает пользователя из контекста (после auth), проверяет роль/право для ресурса; при отсутствии права возвращает 403. Хранение: таблица ролей, связь пользователь-роли, роль-разрешения; или кеш в памяти. Проверка: hasRole(user, "admin") или hasPermission(user, "order:write").
func requireRole(role string) func(http.Handler) http.Handler {
return func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if getUser(r).Role != role { http.Error(w, "Forbidden", 403); return }
next.ServeHTTP(w, r)
})
}
}