gorm_masking

package module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 16, 2022 License: Apache-2.0 Imports: 11 Imported by: 0

README

gorm-masking

gorm plugin to desensitization and encryption data test status

Quick Start

//the code is in tests_test.go
type TestTable struct {
    Id     int    `gorm:"primary_key;column:id"`
    Name   string `gorm:"column:name" masking:"common" masking_encrypt_column:"name_id"` //masking this column
    Age    int    `gorm:"column:age"`
    NameId string `gorm:"column:name_id"` //this column store encrypt date for name
}
//init
var db *gorm.DB
var encryptKey = "1234567890123456"
dsn := "file:test?mode=memory&cache=shared"
sqliteDb, _ := gorm.Open(sqlite.Open(dsn), &gorm.Config{
Logger: logger.Default.LogMode(logger.Info),
})
sqliteDb.Use(New(&Config{Key: encryptKey}))

//query
queryCtx := context.WithValue(context.Background(), UnMaskingContext, []string{"Name"})
var queryDataByFind TestTable
if err := db.WithContext(queryCtx).Find(&queryDataByFind).Error; err != nil {
    t.Error(err)
}

Documentation

Index

Constants

View Source
const (
	// struct tag name
	MaskingTag = "masking"
	// struct tag name
	MaskingEncryptColumnTag = "masking_encrypt_column"
	// context key,value is []string
	UnMaskingContext = "unmasking"
)

system const value

Variables

This section is empty.

Functions

func CreateMasking

func CreateMasking(db *gorm.DB)

func QueryMasking

func QueryMasking(db *gorm.DB)

func RegisterTypeOptions

func RegisterTypeOptions(maskingType MaskingType, dFunc DataMasking)

func UpdateMasking

func UpdateMasking(db *gorm.DB)

Types

type CommonMasking

type CommonMasking struct {
	// contains filtered or unexported fields
}

func NewCommonMasking

func NewCommonMasking(secretKey string, maskingRate float32, maskingPosition MaskingPosition) *CommonMasking

func (*CommonMasking) Making

func (p *CommonMasking) Making(src string, field *schema.Field, db *gorm.DB) (string, string)

func (*CommonMasking) UnMasking

func (p *CommonMasking) UnMasking(v string, field *schema.Field, db *gorm.DB) string

type Config

type Config struct {
	// encryption and decryption key
	Key      string
	VisitLog VisitLog
}

type DataMasking

type DataMasking interface {
	//
	// Making
	//  @Description:  desensitization and encryption data
	//  @param src
	//  @param field
	//  @param db
	//  @return string desensitization value
	//  @return string encryption value
	//
	Making(src string, field *schema.Field, db *gorm.DB) (string, string)
	//
	// UnMasking
	//  @Description: unmasking data
	//  @param v encryption value
	//  @param field
	//  @param db
	//  @return string unmasking value
	//
	UnMasking(v string, field *schema.Field, db *gorm.DB) string
}

func GetTypeOption

func GetTypeOption(maskingType MaskingType) DataMasking

type DataStore

type DataStore interface {
	Create(field *schema.Field, v reflect.Value, desensitizationValue, encryptionValue string, actualValue interface{}, desensitizationType MaskingType, db *gorm.DB) error
	Update(field *schema.Field, desensitizationValue, encryptionValue string, actualValue interface{}, desensitizationType MaskingType, db *gorm.DB) error
}

数据存储的实现 每个表单独实现,其中有内部实现

type Masking

type Masking struct {
	// contains filtered or unexported fields
}

func New

func New(config *Config) *Masking

func (*Masking) Initialize

func (m *Masking) Initialize(db *gorm.DB) error

func (*Masking) Name

func (m *Masking) Name() string

type MaskingPosition

type MaskingPosition string
const (
	Left   MaskingPosition = "left"
	Right  MaskingPosition = "right"
	Middle MaskingPosition = "middle"
)

type MaskingType

type MaskingType string

base data type

const (
	Common MaskingType = "common"
)

plugin has implemented plugin type

type NonVisitLog

type NonVisitLog struct {
}

func (*NonVisitLog) AddVisitLog

func (n *NonVisitLog) AddVisitLog(db *gorm.DB, field *schema.Field, visitType VisitType)

type SameTableDataStore

type SameTableDataStore struct {
}

SameTableDataStore

@Description:  save the desensitization value and encryption value in the same table

func (*SameTableDataStore) Create

func (o *SameTableDataStore) Create(field *schema.Field, vv reflect.Value, desensitizationValue, encryptionValue string, actualValue interface{}, desensitizationType MaskingType,
	db *gorm.DB) error

func (*SameTableDataStore) Update

func (o *SameTableDataStore) Update(field *schema.Field, desensitizationValue, encryptionValue string, actualValue interface{}, desensitizationType MaskingType, db *gorm.DB) error

type VisitLog

type VisitLog interface {
	AddVisitLog(db *gorm.DB, field *schema.Field, visitType VisitType)
}

type VisitType

type VisitType string
const (
	Visit  VisitType = "visit"
	Create VisitType = "create"
	Delete VisitType = "delete"
	Update VisitType = "update"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL