Documentation
¶
Index ¶
- func Setup(db *gorm.DB, _ string) *casbin.SyncedEnforcer
- func SetupForTenant(db *gorm.DB, tenantID int) (*casbin.SyncedEnforcer, error)
- func SetupWithProvider(provider PolicyProvider, tenantID int) (*casbin.SyncedEnforcer, error)
- type Logger
- func (l *Logger) EnableLog(enable bool)
- func (l *Logger) IsEnabled() bool
- func (l *Logger) LogEnforce(matcher string, request []interface{}, result bool, explains [][]string)
- func (l *Logger) LogModel(model [][]string)
- func (l *Logger) LogPolicy(policy map[string][][]string)
- func (l *Logger) LogRole(roles []string)
- type PolicyProvider
- type PolicyRule
- type ProviderAdapter
- func (a *ProviderAdapter) AddPolicy(sec string, ptype string, rule []string) error
- func (a *ProviderAdapter) LoadPolicy(m model.Model) error
- func (a *ProviderAdapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error
- func (a *ProviderAdapter) RemovePolicy(sec string, ptype string, rule []string) error
- func (a *ProviderAdapter) SavePolicy(m model.Model) error
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Setup ¶
func Setup(db *gorm.DB, _ string) *casbin.SyncedEnforcer
Setup 为指定租户创建 Casbin enforcer(向后兼容函数) 注意: 此函数保留用于向后兼容,新代码应使用 SetupForTenant Deprecated: 使用 SetupForTenant 替代,以获得更好的错误处理和多租户支持
func SetupForTenant ¶ added in v1.1.33
SetupForTenant 为指定租户创建独立的 Casbin enforcer 每个租户拥有独立的 adapter、enforcer 实例和 Redis Watcher 频道
⚠️ 仅供 security-management 使用(本地数据库模式) 其他微服务请使用 SetupWithProvider
参数:
- db: 该租户的数据库连接
- tenantID: 租户ID(用于日志标识和 Redis Watcher 频道隔离)
返回:
- *casbin.SyncedEnforcer: 该租户专属的 enforcer 实例
- error: 错误信息
Redis Watcher:
- 每个租户使用独立的 Redis 频道: /casbin/tenant/{tenantID}
- 当租户的权限策略变更时,通过 Redis pub/sub 自动通知所有实例重新加载策略
- Redis 不可用时,enforcer 仍能正常创建和使用(优雅降级)
func SetupWithProvider ¶ added in v1.1.35
func SetupWithProvider(provider PolicyProvider, tenantID int) (*casbin.SyncedEnforcer, error)
SetupWithProvider creates a Casbin enforcer using a PolicyProvider (for microservices) Unlike SetupForTenant, this does not require a local database connection
⚠️ For non-security-management microservices only (remote fetch mode) security-management should continue using SetupForTenant
Parameters:
- provider: Policy provider (implemented by microservice, typically a gRPC adapter)
- tenantID: Tenant identifier
Returns:
- *casbin.SyncedEnforcer: Enforcer with loaded policies
- error: Initialization error
Types ¶
type Logger ¶
type Logger struct {
// contains filtered or unexported fields
}
Logger is the implementation for a Logger using zap logger.
func (*Logger) LogEnforce ¶
func (l *Logger) LogEnforce(matcher string, request []interface{}, result bool, explains [][]string)
LogEnforce log info related to enforce.
type PolicyProvider ¶ added in v1.1.35
type PolicyProvider interface {
// GetPolicies retrieves all policy rules for the specified tenant
//
// Parameters:
// - ctx: Context (for timeout control, cancellation, etc.)
// - tenantID: Tenant identifier
//
// Returns:
// - []PolicyRule: List of policy rules (including both p and g types)
// - error: Error information
GetPolicies(ctx context.Context, tenantID int) ([]PolicyRule, error)
}
PolicyProvider is the strategy interface for providing policy data Microservices implement this interface to supply policies from any source (gRPC, HTTP, DB, etc.)
type PolicyRule ¶ added in v1.1.35
type PolicyRule struct {
PType string // Policy type: "p" (policy) or "g" (role inheritance)
V0 string // Usually sub (role name)
V1 string // Usually obj (resource path)
V2 string // Usually act (HTTP method)
V3 string // Optional extension field
V4 string // Optional extension field
V5 string // Optional extension field
}
PolicyRule represents a single Casbin policy rule.
Validation Rules:
- PType must be a valid Casbin policy type: "p" (policy), "g" (role inheritance), etc.
- V0-V5 fields must be filled contiguously from left to right without gaps
- Empty strings at the end of the sequence are allowed (e.g., V3="", V4="", V5="")
- Empty strings in the middle are NOT allowed (e.g., V0="admin", V1="", V2="GET" is invalid)
This format matches Casbin's standard storage schema (gorm-adapter).
type ProviderAdapter ¶ added in v1.1.35
type ProviderAdapter struct {
// contains filtered or unexported fields
}
ProviderAdapter implements Casbin's persist.Adapter interface using a PolicyProvider This is a read-only adapter - write operations return errors
func NewProviderAdapter ¶ added in v1.1.35
func NewProviderAdapter(provider PolicyProvider, tenantID int) *ProviderAdapter
NewProviderAdapter creates a new ProviderAdapter
func (*ProviderAdapter) AddPolicy ¶ added in v1.1.35
func (a *ProviderAdapter) AddPolicy(sec string, ptype string, rule []string) error
AddPolicy is not supported (read-only adapter)
func (*ProviderAdapter) LoadPolicy ¶ added in v1.1.35
func (a *ProviderAdapter) LoadPolicy(m model.Model) error
LoadPolicy loads all policies from the Provider into the model This is called by Casbin SyncedEnforcer.LoadPolicy()
func (*ProviderAdapter) RemoveFilteredPolicy ¶ added in v1.1.35
func (a *ProviderAdapter) RemoveFilteredPolicy(sec string, ptype string, fieldIndex int, fieldValues ...string) error
RemoveFilteredPolicy is not supported (read-only adapter)
func (*ProviderAdapter) RemovePolicy ¶ added in v1.1.35
func (a *ProviderAdapter) RemovePolicy(sec string, ptype string, rule []string) error
RemovePolicy is not supported (read-only adapter)
func (*ProviderAdapter) SavePolicy ¶ added in v1.1.35
func (a *ProviderAdapter) SavePolicy(m model.Model) error
SavePolicy is not supported (read-only adapter)