diff --git a/.golangci.yml b/.golangci.yml index 55573975..1bc38130 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -233,7 +233,7 @@ linters: - gochecknoinits # checks that no init functions are present in Go code - gochecksumtype # checks exhaustiveness on Go "sum types" #- gocognit # computes and checks the cognitive complexity of functions - #- goconst # finds repeated strings that could be replaced by a constant + - goconst # finds repeated strings that could be replaced by a constant #- gocritic # provides diagnostics that check for bugs, performance and style issues #- gocyclo # computes and checks the cyclomatic complexity of functions - godot # checks if comments end in a period diff --git a/enforcer.go b/enforcer.go index d5c3f557..52f11df4 100644 --- a/enforcer.go +++ b/enforcer.go @@ -22,6 +22,7 @@ import ( "sync" "github.com/casbin/casbin/v2/effector" + casbinerrors "github.com/casbin/casbin/v2/errors" "github.com/casbin/casbin/v2/log" "github.com/casbin/casbin/v2/model" "github.com/casbin/casbin/v2/persist" @@ -29,7 +30,6 @@ import ( "github.com/casbin/casbin/v2/rbac" defaultrolemanager "github.com/casbin/casbin/v2/rbac/default-role-manager" "github.com/casbin/casbin/v2/util" - "github.com/casbin/govaluate" ) @@ -337,7 +337,7 @@ func (e *Enforcer) LoadPolicy() error { } }() - if err = e.adapter.LoadPolicy(newModel); err != nil && err.Error() != "invalid file path, file path cannot be empty" { + if err = e.adapter.LoadPolicy(newModel); err != nil && !errors.Is(err, casbinerrors.ErrInvalidFilePath) { return err } @@ -410,7 +410,7 @@ func (e *Enforcer) loadFilteredPolicy(filter interface{}) error { default: return errors.New("filtered policies are not supported by this adapter") } - if err := filteredAdapter.LoadFilteredPolicy(e.model, filter); err != nil && err.Error() != "invalid file path, file path cannot be empty" { + if err := filteredAdapter.LoadFilteredPolicy(e.model, filter); err != nil && !errors.Is(err, casbinerrors.ErrInvalidFilePath) { return err } @@ -948,21 +948,23 @@ func (p enforceParameters) Get(name string) (interface{}, error) { return nil, nil } + err := errors.New("No parameter '" + name + "' found.") + switch name[0] { case 'p': i, ok := p.pTokens[name] if !ok { - return nil, errors.New("No parameter '" + name + "' found.") + return nil, err } return p.pVals[i], nil case 'r': i, ok := p.rTokens[name] if !ok { - return nil, errors.New("No parameter '" + name + "' found.") + return nil, err } return p.rVals[i], nil default: - return nil, errors.New("No parameter '" + name + "' found.") + return nil, err } } diff --git a/enforcer_synced.go b/enforcer_synced.go index 743f26c7..71adc195 100644 --- a/enforcer_synced.go +++ b/enforcer_synced.go @@ -15,10 +15,13 @@ package casbin import ( + "errors" "sync" "sync/atomic" "time" + casbinerrors "github.com/casbin/casbin/v2/errors" + "github.com/casbin/govaluate" "github.com/casbin/casbin/v2/persist" @@ -132,7 +135,7 @@ func (e *SyncedEnforcer) LoadPolicyFast() error { newRmMap := map[string]rbac.RoleManager{} var err error - if err = e.adapter.LoadPolicy(newModel); err != nil && err.Error() != "invalid file path, file path cannot be empty" { + if err = e.adapter.LoadPolicy(newModel); err != nil && !errors.Is(err, casbinerrors.ErrInvalidFilePath) { return err } diff --git a/errors/errors.go b/errors/errors.go new file mode 100644 index 00000000..3c8b7a65 --- /dev/null +++ b/errors/errors.go @@ -0,0 +1,11 @@ +package errors + +import "errors" + +var ( + ErrInvalidFilePath = errors.New("invalid file path, file path cannot be empty") +) + +func Is(err, target error) bool { + return errors.Is(err, target) +} diff --git a/errors/rbac_errors.go b/errors/rbac_errors.go index 247205ae..2f358b37 100644 --- a/errors/rbac_errors.go +++ b/errors/rbac_errors.go @@ -28,7 +28,3 @@ var ( ErrObjCondition = errors.New("need to meet the prefix required by the object condition") ErrEmptyCondition = errors.New("GetAllowedObjectConditions have an empty condition") ) - -func Is(err, target error) bool { - return errors.Is(err, target) -} diff --git a/persist/file-adapter/adapter.go b/persist/file-adapter/adapter.go index c68f0eaa..5ab86708 100644 --- a/persist/file-adapter/adapter.go +++ b/persist/file-adapter/adapter.go @@ -21,6 +21,7 @@ import ( "os" "strings" + casbinerrors "github.com/casbin/casbin/v2/errors" "github.com/casbin/casbin/v2/model" "github.com/casbin/casbin/v2/persist" "github.com/casbin/casbin/v2/util" @@ -52,7 +53,7 @@ func NewAdapter(filePath string) *Adapter { // LoadPolicy loads all policy rules from the storage. func (a *Adapter) LoadPolicy(model model.Model) error { if a.filePath == "" { - return errors.New("invalid file path, file path cannot be empty") + return casbinerrors.ErrInvalidFilePath } return a.loadPolicyFile(model, persist.LoadPolicyLine) @@ -61,7 +62,7 @@ func (a *Adapter) LoadPolicy(model model.Model) error { // SavePolicy saves all policy rules to the storage. func (a *Adapter) SavePolicy(model model.Model) error { if a.filePath == "" { - return errors.New("invalid file path, file path cannot be empty") + return casbinerrors.ErrInvalidFilePath } var tmp bytes.Buffer diff --git a/persist/file-adapter/adapter_filtered.go b/persist/file-adapter/adapter_filtered.go index 1a074c9a..62b41237 100644 --- a/persist/file-adapter/adapter_filtered.go +++ b/persist/file-adapter/adapter_filtered.go @@ -20,6 +20,7 @@ import ( "os" "strings" + casbinerrors "github.com/casbin/casbin/v2/errors" "github.com/casbin/casbin/v2/model" "github.com/casbin/casbin/v2/persist" ) @@ -63,7 +64,7 @@ func (a *FilteredAdapter) LoadFilteredPolicy(model model.Model, filter interface return a.LoadPolicy(model) } if a.filePath == "" { - return errors.New("invalid file path, file path cannot be empty") + return casbinerrors.ErrInvalidFilePath } filterValue, ok := filter.(*Filter)