dataType

package
v1.3.3 Latest Latest
Warning

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

Go to latest
Published: Mar 17, 2025 License: AGPL-3.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GenAreaAuthScope

func GenAreaAuthScope(ctx context.Context, db *gorm.DB) *gorm.DB

func GenProjectAuthScope

func GenProjectAuthScope(ctx context.Context, db *gorm.DB) *gorm.DB

func GetAreaAuthIDPaths

func GetAreaAuthIDPaths(ctx context.Context) ([]string, error)
func (t AreaIDPath) QueryClauses(f *schema.Field) []clause.Interface {
	return []clause.Interface{AreaIDPathClause{Field: f, T: t, Opt: Select}}
}

func (t AreaIDPath) UpdateClauses(f *schema.Field) []clause.Interface {
	return []clause.Interface{AreaIDPathClause{Field: f, T: t, Opt: Update}}
}

func (t AreaIDPath) CreateClauses(f *schema.Field) []clause.Interface {
	return []clause.Interface{AreaIDPathClause{Field: f, T: t, Opt: Create}}
}

func (t AreaIDPath) DeleteClauses(f *schema.Field) []clause.Interface {
	return []clause.Interface{AreaIDPathClause{Field: f, T: t, Opt: Delete}}
}

type AreaIDPathClause struct {
	clauseInterface
	Field *schema.Field
	T     AreaIDPath
	Opt   Opt
}

func (sd AreaIDPathClause) GenAuthKey() string { //查询的时候会调用此接口

	return fmt.Sprintf(AuthModify, "AreaIDPath")
}

func (sd AreaIDPathClause) ModifyStatement(stmt *gorm.Statement) { //查询的时候会调用此接口

	uc := ctxs.GetUserCtxOrNil(stmt.Context)
	if uc == nil {
		return
	}
	authType, areas := ctxs.GetAreaIDPaths(uc.ProjectID, uc.ProjectAuth)
	if uc.IsAdmin || uc.AllArea || authType <= def.AuthReadWrite {
		return
	}
	switch sd.Opt {
	case Create:
	case Update, Delete, Select:
		if _, ok := stmt.Clauses[sd.GenAuthKey()]; !ok {
			if c, ok := stmt.Clauses["WHERE"]; ok {
				if where, ok := c.Expression.(clause.Where); ok && len(where.Exprs) > 1 {
					for _, expr := range where.Exprs {
						if orCond, ok := expr.(clause.OrConditions); ok && len(orCond.Exprs) == 1 {
							where.Exprs = []clause.Expression{clause.And(where.Exprs...)}
							c.Expression = where
							stmt.Clauses["WHERE"] = c
							break
						}
					}
				}
			}
			if len(areas) == 0 { //如果没有权限
				//stmt.Error = errors.Permissions.WithMsg("区域权限不足")
				stmt.AddClause(clause.Where{Exprs: []clause.Expression{
					clause.IN{Column: clause.Column{Table: clause.CurrentTable, Name: sd.Field.DBName}, Values: nil},
				}})
				stmt.Clauses[sd.GenAuthKey()] = clause.Clause{}
				return
			}
			for _, v := range areas {
				stmt.AddClause(clause.Where{Exprs: []clause.Expression{
					clause.Like{Column: clause.Column{Table: clause.CurrentTable, Name: sd.Field.DBName}, Value: v + "%"},
				}})
			}

			stmt.Clauses[sd.GenAuthKey()] = clause.Clause{}
		}
	}
}

func GetAreaAuthIDs

func GetAreaAuthIDs(ctx context.Context) ([]int64, error)

func GetProjectAuthIDs

func GetProjectAuthIDs(ctx context.Context) ([]int64, error)

Types

type AreaClause

type AreaClause struct {
	stores.ClauseInterface
	Field *schema.Field
	T     AreaID
	Opt   stores.Opt
}

func (AreaClause) GenAuthKey

func (sd AreaClause) GenAuthKey() string

func (AreaClause) ModifyStatement

func (sd AreaClause) ModifyStatement(stmt *gorm.Statement)

type AreaID

type AreaID int64

func (AreaID) CreateClauses

func (t AreaID) CreateClauses(f *schema.Field) []clause.Interface

func (AreaID) DeleteClauses

func (t AreaID) DeleteClauses(f *schema.Field) []clause.Interface

func (AreaID) GormValue

func (t AreaID) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)

func (AreaID) QueryClauses

func (t AreaID) QueryClauses(f *schema.Field) []clause.Interface

func (*AreaID) Scan

func (t *AreaID) Scan(value interface{}) error

func (AreaID) UpdateClauses

func (t AreaID) UpdateClauses(f *schema.Field) []clause.Interface

func (AreaID) Value

func (t AreaID) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type AreaIDPath

type AreaIDPath string

func (AreaIDPath) GormValue

func (t AreaIDPath) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)

func (*AreaIDPath) Scan

func (t *AreaIDPath) Scan(value interface{}) error

func (AreaIDPath) Value

func (t AreaIDPath) Value() (driver.Value, error)

type ProjectClause

type ProjectClause struct {
	stores.ClauseInterface
	Field *schema.Field
	T     ProjectID
	Opt   stores.Opt
}

func (ProjectClause) GenAuthKey

func (sd ProjectClause) GenAuthKey() string

func (ProjectClause) ModifyStatement

func (sd ProjectClause) ModifyStatement(stmt *gorm.Statement)

type ProjectID

type ProjectID int64

func (ProjectID) CreateClauses

func (t ProjectID) CreateClauses(f *schema.Field) []clause.Interface

func (ProjectID) DeleteClauses

func (t ProjectID) DeleteClauses(f *schema.Field) []clause.Interface

func (ProjectID) GormValue

func (t ProjectID) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)

func (ProjectID) QueryClauses

func (t ProjectID) QueryClauses(f *schema.Field) []clause.Interface

func (*ProjectID) Scan

func (t *ProjectID) Scan(value interface{}) error

func (ProjectID) UpdateClauses

func (t ProjectID) UpdateClauses(f *schema.Field) []clause.Interface

func (ProjectID) Value

func (t ProjectID) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type TenantCode

type TenantCode string

func (TenantCode) CreateClauses

func (t TenantCode) CreateClauses(f *schema.Field) []clause.Interface

func (TenantCode) DeleteClauses

func (t TenantCode) DeleteClauses(f *schema.Field) []clause.Interface

func (TenantCode) GetAuthIDs

func (t TenantCode) GetAuthIDs(f *schema.Field) stores.GetValues

func (TenantCode) GormValue

func (t TenantCode) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)

func (TenantCode) QueryClauses

func (t TenantCode) QueryClauses(f *schema.Field) []clause.Interface

func (*TenantCode) Scan

func (t *TenantCode) Scan(value interface{}) error

func (TenantCode) UpdateClauses

func (t TenantCode) UpdateClauses(f *schema.Field) []clause.Interface

func (TenantCode) Value

func (t TenantCode) Value() (driver.Value, error)

Value implements the driver Valuer interface.

type TenantCodeClause

type TenantCodeClause struct {
	stores.ClauseInterface
	Field *schema.Field
	T     TenantCode
	Opt   stores.Opt
}

func (TenantCodeClause) GenAuthKey

func (sd TenantCodeClause) GenAuthKey() string

func (TenantCodeClause) ModifyStatement

func (sd TenantCodeClause) ModifyStatement(stmt *gorm.Statement)

Jump to

Keyboard shortcuts

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