package req import "git.fsdpf.net/go/db" type ResOptions struct { Tx *db.TxDatabase Alias string Silent bool // Permission 默认零值 0:不传 WithPermission 时,行级过滤和字段脱敏都跳过;显式传 // ResRow/ResMask(或组合 ResAll)才会开启对应的检查,两者相互独立。 Permission ResFlags } type ResOption func(p *ResOptions) func WithTx(tx *db.TxDatabase) ResOption { return func(p *ResOptions) { p.Tx = tx } } func WithAlias(as string) ResOption { return func(p *ResOptions) { p.Alias = as } } // WithSilent 让这次写操作跳过变更通知(ResChangeEventFunc/ResWatcher),权限过滤、字段脱敏、 // 字段规范化、类型转换、默认值填充等都不受影响。用于类似"记录登录 IP"这种高频写、但不需要广播 // "资源变了"的场景,避免不必要的缓存刷新/watcher 触发。 func WithSilent() ResOption { return func(p *ResOptions) { p.Silent = true } } // WithPermission 显式指定这次写/查操作要开启哪些权限检查。ResRow 开启行级过滤(WHERE 注入), // ResMask 开启字段级脱敏(读脱敏、写权限),两者可以按位组合传,也可以只传一个;不调用这个 option // 时两者都跳过。变更通知、字段规范化、类型转换、默认值填充等不受这个 option 影响。 func WithPermission(f ResFlags) ResOption { return func(p *ResOptions) { p.Permission = f } } type gParamsOpt func(g *gparams) func Session(session string) gParamsOpt { return func(g *gparams) { g.session = session } }