34 lines
1.3 KiB
Go
34 lines
1.3 KiB
Go
|
|
package repository
|
||
|
|
|
||
|
|
import "context"
|
||
|
|
|
||
|
|
// CasbinPolicyAdapter is the persistence interface used by the RBAC
|
||
|
|
// usecase to load/save Casbin policy for a single tenant. The Mongo /
|
||
|
|
// Redis implementations live under repository/.
|
||
|
|
//
|
||
|
|
// A "rule" is the stringified Casbin tuple, e.g.
|
||
|
|
//
|
||
|
|
// ["p", "tenant_admin", "/api/v1/permissions/*", "GET|POST"]
|
||
|
|
// ["g", "TENANT-100001", "tenant_admin"]
|
||
|
|
//
|
||
|
|
// Rule format mirrors casbin's [][]string convention exactly.
|
||
|
|
type CasbinPolicyAdapter interface {
|
||
|
|
// LoadAll returns every rule for tenantID. An empty slice means
|
||
|
|
// "tenant has no policy" — callers should still call
|
||
|
|
// enforcer.LoadFilteredPolicy with the tenant filter.
|
||
|
|
LoadAll(ctx context.Context, tenantID string) ([][]string, error)
|
||
|
|
|
||
|
|
// SaveAll replaces all rules for tenantID with rules. Implementations
|
||
|
|
// MUST do this atomically (Redis MULTI / Mongo transaction).
|
||
|
|
SaveAll(ctx context.Context, tenantID string, rules [][]string) error
|
||
|
|
|
||
|
|
// AddPolicy adds a single rule.
|
||
|
|
AddPolicy(ctx context.Context, tenantID string, rule []string) error
|
||
|
|
|
||
|
|
// RemovePolicy removes a single rule.
|
||
|
|
RemovePolicy(ctx context.Context, tenantID string, rule []string) error
|
||
|
|
|
||
|
|
// Clear empties all rules for tenantID (used by tests + tenant disable).
|
||
|
|
Clear(ctx context.Context, tenantID string) error
|
||
|
|
}
|