@@ -281,22 +281,25 @@ func (model Model) AddPoliciesWithAffected(sec string, ptype string, rules [][]s
281281// RemovePolicy removes a policy rule from the model.
282282// Deprecated: Using AddPoliciesWithAffected instead.
283283func (model Model ) RemovePolicy (sec string , ptype string , rule []string ) (bool , error ) {
284- _ , err := model .GetAssertion (sec , ptype )
284+ ast , err := model .GetAssertion (sec , ptype )
285285 if err != nil {
286286 return false , err
287287 }
288- index , ok := model [sec ][ptype ].PolicyMap [strings .Join (rule , DefaultSep )]
288+ key := strings .Join (rule , DefaultSep )
289+ index , ok := ast .PolicyMap [key ]
289290 if ! ok {
290- return false , err
291+ return false , nil
291292 }
292293
293- model [sec ][ptype ].Policy = append (model [sec ][ptype ].Policy [:index ], model [sec ][ptype ].Policy [index + 1 :]... )
294- delete (model [sec ][ptype ].PolicyMap , strings .Join (rule , DefaultSep ))
295- for i := index ; i < len (model [sec ][ptype ].Policy ); i ++ {
296- model [sec ][ptype ].PolicyMap [strings .Join (model [sec ][ptype ].Policy [i ], DefaultSep )] = i
294+ lastIdx := len (ast .Policy ) - 1
295+ if index != lastIdx {
296+ ast .Policy [index ] = ast .Policy [lastIdx ]
297+ lastPolicyKey := strings .Join (ast .Policy [index ], DefaultSep )
298+ ast .PolicyMap [lastPolicyKey ] = index
297299 }
298-
299- return true , err
300+ ast .Policy = ast .Policy [:lastIdx ]
301+ delete (ast .PolicyMap , key )
302+ return true , nil
300303}
301304
302305// UpdatePolicy updates a policy rule from the model.
0 commit comments