@@ -150,35 +150,46 @@ func (ai *accessInfo) canChangeMetricByName(create bool, old format.MetricMetaVa
150150		(ai .bitEditDefault  &&  ! ai .protectedMetric (oldName ) &&  ! ai .protectedMetric (newName ))
151151}
152152
153- func  (ai  * accessInfo ) CanEditMetric (create  bool , old  format.MetricMetaValue , new_  format.MetricMetaValue ) bool  {
154- 	if  ai .canChangeMetricByName (create , old , new_ ) {
155- 		if  ai .bitAdmin  {
156- 			return  true 
157- 		}
158- 		if  old .Weight  !=  new_ .Weight  &&  ! (old .Weight  ==  0  &&  new_ .Weight  ==  1 ) {
159- 			return  false 
160- 		}
161- 		if  preKey (old ) !=  preKey (new_ ) {
162- 			return  false 
153+ func  (ai  * accessInfo ) CanEditMetric (create  bool , old  format.MetricMetaValue , new_  format.MetricMetaValue ) error  {
154+ 	if  ! ai .canChangeMetricByName (create , old , new_ ) {
155+ 		return  fmt .Errorf ("access forbidden" )
156+ 	}
157+ 	if  ai .bitAdmin  {
158+ 		return  nil 
159+ 	}
160+ 	if  old .Weight  !=  new_ .Weight  &&  ! (old .Weight  ==  0  &&  new_ .Weight  ==  1 ) {
161+ 		return  fmt .Errorf ("access control prevents changing weight" )
162+ 	}
163+ 	if  old .PreKeyFrom  !=  new_ .PreKeyFrom  {
164+ 		return  fmt .Errorf ("access control prevents changing 'presort tag'" )
165+ 	}
166+ 	if  old .PreKeyOnly  !=  new_ .PreKeyOnly  {
167+ 		return  fmt .Errorf ("access control prevents changing 'presort tag only'" )
168+ 	}
169+ 	if  skips (old ) !=  skips (new_ ) {
170+ 		return  fmt .Errorf ("access control prevents changing 'max host', 'min host' or 'sum square'" )
171+ 	}
172+ 	if  old .ShardStrategy  !=  new_ .ShardStrategy  {
173+ 		return  fmt .Errorf ("access control prevents changing sharding strategy" )
174+ 	}
175+ 	if  old .ShardNum  !=  new_ .ShardNum  {
176+ 		return  fmt .Errorf ("access control prevents changing sharding strategy shard" )
177+ 	}
178+ 	for  i  :=  0 ; i  <  max (len (old .Tags ), len (new_ .Tags )); i ++  {
179+ 		// reducing # of tags implicitly clears RawKind 
180+ 		newRaw  :=  false 
181+ 		if  i  <  len (new_ .Tags ) {
182+ 			newRaw  =  new_ .Tags [i ].RawKind  !=  "" 
163183		}
164- 		if  preKeyOnly (old ) !=  preKeyOnly (new_ ) {
165- 			return  false 
184+ 		oldRaw  :=  false 
185+ 		if  i  <  len (old .Tags ) {
186+ 			oldRaw  =  old .Tags [i ].RawKind  !=  "" 
166187		}
167- 		if  skips ( old )  !=  skips ( new_ )  {
168- 			return  false 
188+ 		if  newRaw  !=  oldRaw  {
189+ 			return  fmt . Errorf ( "access control prevents modifying Raw Tag attribute" ) 
169190		}
170- 
171- 		return  true 
172191	}
173- 	return  false 
174- }
175- 
176- func  preKey (m  format.MetricMetaValue ) uint32  {
177- 	return  m .PreKeyFrom 
178- }
179- 
180- func  preKeyOnly (m  format.MetricMetaValue ) bool  {
181- 	return  m .PreKeyOnly 
192+ 	return  nil 
182193}
183194
184195func  skips (m  format.MetricMetaValue ) [3 ]bool  {
0 commit comments