MCPcopy
hub / github.com/apache/casbin / ApplyOperationsToModel

Method ApplyOperationsToModel

transaction_buffer.go:81–117  ·  view source on GitHub ↗

ApplyOperationsToModel applies all buffered operations to a model and returns the result. This simulates what the model would look like after all operations are applied. It's used for validation and preview purposes within the transaction.

(baseModel model.Model)

Source from the content-addressed store, hash-verified

79// This simulates what the model would look like after all operations are applied.
80// It's used for validation and preview purposes within the transaction.
81func (tb *TransactionBuffer) ApplyOperationsToModel(baseModel model.Model) (model.Model, error) {
82 tb.mutex.RLock()
83 defer tb.mutex.RUnlock()
84
85 resultModel := baseModel.Copy()
86
87 for _, op := range tb.operations {
88 switch op.Type {
89 case persist.OperationAdd:
90 for _, rule := range op.Rules {
91 if err := resultModel.AddPolicy(op.Section, op.PolicyType, rule); err != nil {
92 return nil, err
93 }
94 }
95 case persist.OperationRemove:
96 for _, rule := range op.Rules {
97 if _, err := resultModel.RemovePolicy(op.Section, op.PolicyType, rule); err != nil {
98 return nil, err
99 }
100 }
101 case persist.OperationUpdate:
102 // For update operations, remove old rules and add new ones.
103 for i, oldRule := range op.OldRules {
104 if i < len(op.Rules) {
105 if _, err := resultModel.RemovePolicy(op.Section, op.PolicyType, oldRule); err != nil {
106 return nil, err
107 }
108 if err := resultModel.AddPolicy(op.Section, op.PolicyType, op.Rules[i]); err != nil {
109 return nil, err
110 }
111 }
112 }
113 }
114 }
115
116 return resultModel, nil
117}
118
119// HasOperations returns true if there are any buffered operations.
120func (tb *TransactionBuffer) HasOperations() bool {

Callers 9

AddNamedPolicyMethod · 0.80
AddNamedPoliciesMethod · 0.80
RemoveNamedPolicyMethod · 0.80
RemoveNamedPoliciesMethod · 0.80
UpdateNamedPolicyMethod · 0.80
GetBufferedModelMethod · 0.80

Calls 3

CopyMethod · 0.80
AddPolicyMethod · 0.65
RemovePolicyMethod · 0.65

Tested by

no test coverage detected