(pattern: string, action: string)
| 388 | } |
| 389 | |
| 390 | function actionMatches(pattern: string, action: string): boolean { |
| 391 | if (pattern === "*") return true; |
| 392 | if (pattern === action) return true; |
| 393 | // `s3:*` matches `s3:GetObject` etc. |
| 394 | if (pattern.endsWith(":*")) { |
| 395 | const service = pattern.slice(0, -2); |
| 396 | return action.startsWith(`${service}:`); |
| 397 | } |
| 398 | // Single trailing `*` wildcard ("s3:Get*"). |
| 399 | if (pattern.endsWith("*")) { |
| 400 | return action.startsWith(pattern.slice(0, -1)); |
| 401 | } |
| 402 | return false; |
| 403 | } |