UpdatePolicy updates the policy.
(ctx context.Context, patch *UpdatePolicyMessage)
| 575 | |
| 576 | // UpdatePolicy updates the policy. |
| 577 | func (s *Store) UpdatePolicy(ctx context.Context, patch *UpdatePolicyMessage) (*PolicyMessage, error) { |
| 578 | set := qb.Q() |
| 579 | set.Comma("updated_at = ?", time.Now()) |
| 580 | if v := patch.InheritFromParent; v != nil { |
| 581 | set.Comma("inherit_from_parent = ?", *v) |
| 582 | } |
| 583 | if v := patch.Payload; v != nil { |
| 584 | set.Comma("payload = ?", *v) |
| 585 | } |
| 586 | if v := patch.Enforce; v != nil { |
| 587 | set.Comma("enforce = ?", *v) |
| 588 | } |
| 589 | |
| 590 | query, args, err := qb.Q().Space("UPDATE policy SET ? WHERE resource_type = ? AND resource = ? AND type = ? AND workspace = ? RETURNING payload, inherit_from_parent, enforce, updated_at", set, patch.ResourceType, patch.Resource, patch.Type.String(), patch.Workspace).ToSQL() |
| 591 | if err != nil { |
| 592 | return nil, errors.Wrapf(err, "failed to build sql") |
| 593 | } |
| 594 | |
| 595 | policy := &PolicyMessage{ |
| 596 | Workspace: patch.Workspace, |
| 597 | Resource: patch.Resource, |
| 598 | ResourceType: patch.ResourceType, |
| 599 | Type: patch.Type, |
| 600 | } |
| 601 | |
| 602 | if err := s.GetDB().QueryRowContext(ctx, query, args...).Scan( |
| 603 | &policy.Payload, |
| 604 | &policy.InheritFromParent, |
| 605 | &policy.Enforce, |
| 606 | &policy.UpdatedAt, |
| 607 | ); err != nil { |
| 608 | if err == sql.ErrNoRows { |
| 609 | return nil, nil |
| 610 | } |
| 611 | return nil, err |
| 612 | } |
| 613 | |
| 614 | s.policyCache.Add(getPolicyCacheKey(patch.Workspace, patch.ResourceType, patch.Resource, patch.Type), policy) |
| 615 | if patch.Type == storepb.Policy_IAM { |
| 616 | s.iamPolicyCache.Remove(getIamPolicyCacheKey(patch.Workspace, patch.ResourceType, patch.Resource)) |
| 617 | } |
| 618 | |
| 619 | return policy, nil |
| 620 | } |
| 621 | |
| 622 | // DeletePolicy deletes the policy. |
| 623 | func (s *Store) DeletePolicy(ctx context.Context, policy *PolicyMessage) error { |
nothing calls this directly
no test coverage detected