Skip to content

feat: upgrade casbin to v3 and bump module path to v5#76

Open
shushenghong wants to merge 1 commit into
apache:masterfrom
shushenghong:feat/upgrade-casbin-v3
Open

feat: upgrade casbin to v3 and bump module path to v5#76
shushenghong wants to merge 1 commit into
apache:masterfrom
shushenghong:feat/upgrade-casbin-v3

Conversation

@shushenghong
Copy link
Copy Markdown

Summary

Upgrade the adapter from casbin/v2 to casbin/v3, and bump the module path from v4 to v5 accordingly.

Why bump the major version

casbin v3 is a breaking-change major release:

  • Imports move from github.com/casbin/casbin/v2/... to v3/.... Since casbin/v2/persist.Adapter and casbin/v3/persist.Adapter are distinct types in distinct packages (Go has no structural interface inheritance across module versions), an adapter built against v2 cannot satisfy v3's persist.Adapter interface and vice versa.
  • Several Enforcer methods (GetPolicy, HasPolicy, GetAllRoles, GetAllSubjects, ...) gained an error return value, breaking direct callers.

By Go module semantic import versioning, downstream users importing the v2-based adapter (mongodb-adapter/v4) cannot transparently consume a v3-based adapter at the same import path. Therefore this adapter must also bump its major version: v4v5.

Changes

  • go.mod: module path mongodb-adapter/v4v5; casbin/v2 v2.71.1casbin/v3 v3.10.0; refresh transitive deps (drop Knetic/govaluate, add bmatcuk/doublestar/v4, casbin/govaluate v1.3.0, google/uuid).
  • adapter.go: switch model / persist imports from casbin/v2 to v3. The Adapter / BatchAdapter / FilteredAdapter / UpdatableAdapter interface signatures themselves are otherwise unchanged, so the adapter implementation needed no logic changes.
  • adapter_test.go: switch casbin and util imports to v3; adapt testGetPolicy / testGetPolicyWithoutOrder helpers to the new GetPolicy() ([][]string, error) signature.
  • README.md: bump install command and example imports to v5 / casbin/v3.

Validation

  • go build ./... and go vet ./... pass.
  • go test -count=1 -run='^$' ./... (compile-only) passes.
  • Full integration tests still rely on a live MongoDB instance via TEST_MONGODB_URL / TEST_REPLICA_SET_URL; the existing .github/workflows/ci.yml should run them unchanged on the v3 codebase.

Downstream context

This unblocks gorm-adapter/v3 users who already run on casbin v3 but have to keep an indirect casbin/v2 dependency only because of this adapter (e.g. https://github.com/gun-go/sgo and similar frameworks dual-supporting SQL + Mongo policy storage end up shipping both v2 and v3 in the same binary today).

Test plan

  • CI: confirm go test -v ./... passes against the bundled MongoDB / replica-set services.
  • Maintainer review of the major-version bump and release process (semantic-release config will need to consider that v5 lives at this same repo path going forward).

Casbin v3 is a breaking-change major release: imports move from
github.com/casbin/casbin/v2/... to v3/..., and several Enforcer
methods (GetPolicy, HasPolicy, GetAllRoles, ...) gain an error
return value. Per Go module semantic import versioning, downstream
users importing the v2-based adapter cannot transparently consume
the v3-based one, so this adapter must also bump its major.

Changes:
- go.mod: module path v4 -> v5; casbin/v2 v2.71.1 -> casbin/v3 v3.10.0;
  refresh transitive deps (drop Knetic/govaluate, add
  bmatcuk/doublestar/v4, casbin/govaluate v1.3.0, google/uuid).
- adapter.go: switch model/persist imports from casbin/v2 to v3
  (Adapter / BatchAdapter / FilteredAdapter / UpdatableAdapter
  interface signatures are otherwise unchanged).
- adapter_test.go: switch casbin & util imports to v3; adapt
  testGetPolicy / testGetPolicyWithoutOrder helpers to the new
  GetPolicy() ([][]string, error) signature.
- README.md: bump install command and example imports to v5 / v3.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant