AddPolicy 添加策略
(policy *SecurityPolicy)
| 439 | |
| 440 | // AddPolicy 添加策略 |
| 441 | func (bpe *BasicPolicyEngine) AddPolicy(policy *SecurityPolicy) error { |
| 442 | bpe.mu.Lock() |
| 443 | defer bpe.mu.Unlock() |
| 444 | |
| 445 | if policy.ID == "" { |
| 446 | return errors.New("policy ID is required") |
| 447 | } |
| 448 | |
| 449 | if _, exists := bpe.policies[policy.ID]; exists { |
| 450 | return fmt.Errorf("policy %s already exists", policy.ID) |
| 451 | } |
| 452 | |
| 453 | // 设置默认值 |
| 454 | if policy.Version == "" { |
| 455 | policy.Version = "1.0.0" |
| 456 | } |
| 457 | if policy.Priority == 0 { |
| 458 | policy.Priority = 100 |
| 459 | } |
| 460 | if policy.CreatedAt.IsZero() { |
| 461 | policy.CreatedAt = time.Now() |
| 462 | } |
| 463 | if policy.UpdatedAt.IsZero() { |
| 464 | policy.UpdatedAt = time.Now() |
| 465 | } |
| 466 | |
| 467 | bpe.policies[policy.ID] = policy |
| 468 | |
| 469 | // 记录审计日志 |
| 470 | if bpe.config.EnableAudit && bpe.auditLog != nil { |
| 471 | _ = bpe.auditLog.LogEvent(AuditEvent{ |
| 472 | Type: AuditTypePolicyCreated, |
| 473 | UserID: policy.CreatedBy, |
| 474 | Timestamp: time.Now(), |
| 475 | Message: fmt.Sprintf("Policy %s (%s) created", policy.ID, policy.Name), |
| 476 | Metadata: map[string]any{ |
| 477 | "policy_id": policy.ID, |
| 478 | "policy_name": policy.Name, |
| 479 | "policy_scope": policy.Scope, |
| 480 | "policy_target": policy.Target, |
| 481 | }, |
| 482 | }) |
| 483 | } |
| 484 | |
| 485 | return nil |
| 486 | } |
| 487 | |
| 488 | // UpdatePolicy 更新策略 |
| 489 | func (bpe *BasicPolicyEngine) UpdatePolicy(policy *SecurityPolicy) error { |