AddPolicy adds a policy rule to the model.
(sec string, ptype string, rule []string)
| 195 | |
| 196 | // AddPolicy adds a policy rule to the model. |
| 197 | func (model Model) AddPolicy(sec string, ptype string, rule []string) error { |
| 198 | assertion, err := model.GetAssertion(sec, ptype) |
| 199 | if err != nil { |
| 200 | return err |
| 201 | } |
| 202 | assertion.Policy = append(assertion.Policy, rule) |
| 203 | assertion.PolicyMap[strings.Join(rule, DefaultSep)] = len(model[sec][ptype].Policy) - 1 |
| 204 | |
| 205 | hasPriority := false |
| 206 | if _, ok := assertion.FieldIndexMap[constant.PriorityIndex]; ok { |
| 207 | hasPriority = true |
| 208 | } |
| 209 | if sec == "p" && hasPriority { |
| 210 | if idxInsert, err := strconv.Atoi(rule[assertion.FieldIndexMap[constant.PriorityIndex]]); err == nil { |
| 211 | i := len(assertion.Policy) - 1 |
| 212 | for ; i > 0; i-- { |
| 213 | idx, err := strconv.Atoi(assertion.Policy[i-1][assertion.FieldIndexMap[constant.PriorityIndex]]) |
| 214 | if err != nil || idx <= idxInsert { |
| 215 | break |
| 216 | } |
| 217 | assertion.Policy[i] = assertion.Policy[i-1] |
| 218 | assertion.PolicyMap[strings.Join(assertion.Policy[i-1], DefaultSep)]++ |
| 219 | } |
| 220 | assertion.Policy[i] = rule |
| 221 | assertion.PolicyMap[strings.Join(rule, DefaultSep)] = i |
| 222 | } |
| 223 | } |
| 224 | return nil |
| 225 | } |
| 226 | |
| 227 | // AddPolicies adds policy rules to the model. |
| 228 | func (model Model) AddPolicies(sec string, ptype string, rules [][]string) error { |
no test coverage detected