Documentation
¶
Index ¶
- func GenAreaAuthScope(ctx context.Context, db *gorm.DB) *gorm.DB
- func GenProjectAuthScope(ctx context.Context, db *gorm.DB) *gorm.DB
- func GetAreaAuthIDPaths(ctx context.Context) ([]string, error)
- func GetAreaAuthIDs(ctx context.Context) ([]int64, error)
- func GetProjectAuthIDs(ctx context.Context) ([]int64, error)
- type AreaClause
- type AreaID
- func (t AreaID) CreateClauses(f *schema.Field) []clause.Interface
- func (t AreaID) DeleteClauses(f *schema.Field) []clause.Interface
- func (t AreaID) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)
- func (t AreaID) QueryClauses(f *schema.Field) []clause.Interface
- func (t *AreaID) Scan(value interface{}) error
- func (t AreaID) UpdateClauses(f *schema.Field) []clause.Interface
- func (t AreaID) Value() (driver.Value, error)
- type AreaIDPath
- type ProjectClause
- type ProjectID
- func (t ProjectID) CreateClauses(f *schema.Field) []clause.Interface
- func (t ProjectID) DeleteClauses(f *schema.Field) []clause.Interface
- func (t ProjectID) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)
- func (t ProjectID) QueryClauses(f *schema.Field) []clause.Interface
- func (t *ProjectID) Scan(value interface{}) error
- func (t ProjectID) UpdateClauses(f *schema.Field) []clause.Interface
- func (t ProjectID) Value() (driver.Value, error)
- type TenantCode
- func (t TenantCode) CreateClauses(f *schema.Field) []clause.Interface
- func (t TenantCode) DeleteClauses(f *schema.Field) []clause.Interface
- func (t TenantCode) GetAuthIDs(f *schema.Field) stores.GetValues
- func (t TenantCode) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)
- func (t TenantCode) QueryClauses(f *schema.Field) []clause.Interface
- func (t *TenantCode) Scan(value interface{}) error
- func (t TenantCode) UpdateClauses(f *schema.Field) []clause.Interface
- func (t TenantCode) Value() (driver.Value, error)
- type TenantCodeClause
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetAreaAuthIDPaths ¶
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{} } } }
Types ¶
type AreaClause ¶
func (AreaClause) GenAuthKey ¶
func (sd AreaClause) GenAuthKey() string
func (AreaClause) ModifyStatement ¶
func (sd AreaClause) ModifyStatement(stmt *gorm.Statement)
type AreaIDPath ¶
type AreaIDPath string
func (*AreaIDPath) Scan ¶
func (t *AreaIDPath) Scan(value interface{}) error
type ProjectClause ¶
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 (ProjectID) DeleteClauses ¶
func (ProjectID) UpdateClauses ¶
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) 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
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)
Click to show internal directories.
Click to hide internal directories.