@@ -160,7 +160,19 @@ func (s *OrgPolicyService) UpdatePolicy(ctx context.Context, req *connect.Reques
160160 switch path {
161161 case "inherit_from_parent" :
162162 patch .InheritFromParent = & req .Msg .Policy .InheritFromParent
163- case "payload" :
163+ case
164+ "rollout_policy" ,
165+ "disable_copy_data_policy" ,
166+ "masking_rule_policy" ,
167+ "masking_exception_policy" ,
168+ "restrict_issue_creation_for_sql_review_policy" ,
169+ "tag_policy" ,
170+ "data_source_query_policy" ,
171+ "export_data_policy" ,
172+ "query_data_policy" :
173+ if ! pathMatchType (path , policy .Type ) {
174+ return nil , connect .NewError (connect .CodeInvalidArgument , errors .Errorf ("invalid path %s for policy type %s" , path , policy .Type .String ()))
175+ }
164176 if err := validatePolicyPayload (policy .Type , req .Msg .Policy ); err != nil {
165177 return nil , connect .NewError (connect .CodeInvalidArgument , errors .Wrap (err , "invalid policy" ))
166178 }
@@ -172,6 +184,7 @@ func (s *OrgPolicyService) UpdatePolicy(ctx context.Context, req *connect.Reques
172184 case "enforce" :
173185 patch .Enforce = & req .Msg .Policy .Enforce
174186 default :
187+ return nil , connect .NewError (connect .CodeInvalidArgument , errors .Errorf ("unexpected path %s" , path ))
175188 }
176189 }
177190
@@ -188,6 +201,31 @@ func (s *OrgPolicyService) UpdatePolicy(ctx context.Context, req *connect.Reques
188201 return connect .NewResponse (response ), nil
189202}
190203
204+ func pathMatchType (path string , policyType storepb.Policy_Type ) bool {
205+ switch policyType {
206+ case storepb .Policy_ROLLOUT :
207+ return path == "rollout_policy"
208+ case storepb .Policy_DISABLE_COPY_DATA :
209+ return path == "disable_copy_data_policy"
210+ case storepb .Policy_MASKING_RULE :
211+ return path == "masking_rule_policy"
212+ case storepb .Policy_MASKING_EXCEPTION :
213+ return path == "masking_exception_policy"
214+ case storepb .Policy_RESTRICT_ISSUE_CREATION_FOR_SQL_REVIEW :
215+ return path == "restrict_issue_creation_for_sql_review_policy"
216+ case storepb .Policy_TAG :
217+ return path == "tag_policy"
218+ case storepb .Policy_DATA_SOURCE_QUERY :
219+ return path == "data_source_query_policy"
220+ case storepb .Policy_EXPORT_DATA :
221+ return path == "export_data_policy"
222+ case storepb .Policy_QUERY_DATA :
223+ return path == "query_data_policy"
224+ default :
225+ return false
226+ }
227+ }
228+
191229// DeletePolicy deletes a policy for a specific resource.
192230func (s * OrgPolicyService ) DeletePolicy (ctx context.Context , req * connect.Request [v1pb.DeletePolicyRequest ]) (* connect.Response [emptypb.Empty ], error ) {
193231 policy , _ , err := s .findPolicyMessage (ctx , req .Msg .Name )
0 commit comments