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 DeptID
- type DeptIDPath
- 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
- type TenantCodeWitCommonClause
- type TenantCodeWithCommon2Clause
- type TenantCodeWithCommonN
- func (t TenantCodeWithCommonN) CreateClauses(f *schema.Field) []clause.Interface
- func (t TenantCodeWithCommonN) DeleteClauses(f *schema.Field) []clause.Interface
- func (t TenantCodeWithCommonN) GetAuthIDs(f *schema.Field) stores.GetValues
- func (t TenantCodeWithCommonN) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)
- func (t TenantCodeWithCommonN) QueryClauses(f *schema.Field) []clause.Interface
- func (t *TenantCodeWithCommonN) Scan(value interface{}) error
- func (t TenantCodeWithCommonN) UpdateClauses(f *schema.Field) []clause.Interface
- func (t TenantCodeWithCommonN) Value() (driver.Value, error)
- type TenantCodeWithCommonR
- func (t TenantCodeWithCommonR) CreateClauses(f *schema.Field) []clause.Interface
- func (t TenantCodeWithCommonR) DeleteClauses(f *schema.Field) []clause.Interface
- func (t TenantCodeWithCommonR) GetAuthIDs(f *schema.Field) stores.GetValues
- func (t TenantCodeWithCommonR) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr)
- func (t TenantCodeWithCommonR) QueryClauses(f *schema.Field) []clause.Interface
- func (t *TenantCodeWithCommonR) Scan(value interface{}) error
- func (t TenantCodeWithCommonR) UpdateClauses(f *schema.Field) []clause.Interface
- func (t TenantCodeWithCommonR) Value() (driver.Value, error)
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 DeptIDPath ¶ added in v1.3.4
type DeptIDPath string
func (*DeptIDPath) Scan ¶ added in v1.3.4
func (t *DeptIDPath) 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)
type TenantCodeWitCommonClause ¶ added in v1.5.1
type TenantCodeWitCommonClause struct {
stores.ClauseInterface
Field *schema.Field
T TenantCodeWithCommonR
Opt stores.Opt
}
func (TenantCodeWitCommonClause) GenAuthKey ¶ added in v1.5.1
func (sd TenantCodeWitCommonClause) GenAuthKey() string
func (TenantCodeWitCommonClause) ModifyStatement ¶ added in v1.5.1
func (sd TenantCodeWitCommonClause) ModifyStatement(stmt *gorm.Statement)
type TenantCodeWithCommon2Clause ¶ added in v1.5.2
type TenantCodeWithCommon2Clause struct {
stores.ClauseInterface
Field *schema.Field
T TenantCodeWithCommonN
Opt stores.Opt
}
func (TenantCodeWithCommon2Clause) GenAuthKey ¶ added in v1.5.2
func (sd TenantCodeWithCommon2Clause) GenAuthKey() string
func (TenantCodeWithCommon2Clause) ModifyStatement ¶ added in v1.5.2
func (sd TenantCodeWithCommon2Clause) ModifyStatement(stmt *gorm.Statement)
type TenantCodeWithCommonN ¶ added in v1.5.2
type TenantCodeWithCommonN string //非root不可看不可写
func (TenantCodeWithCommonN) CreateClauses ¶ added in v1.5.2
func (t TenantCodeWithCommonN) CreateClauses(f *schema.Field) []clause.Interface
func (TenantCodeWithCommonN) DeleteClauses ¶ added in v1.5.2
func (t TenantCodeWithCommonN) DeleteClauses(f *schema.Field) []clause.Interface
func (TenantCodeWithCommonN) GetAuthIDs ¶ added in v1.5.2
func (t TenantCodeWithCommonN) GetAuthIDs(f *schema.Field) stores.GetValues
func (TenantCodeWithCommonN) QueryClauses ¶ added in v1.5.2
func (t TenantCodeWithCommonN) QueryClauses(f *schema.Field) []clause.Interface
func (*TenantCodeWithCommonN) Scan ¶ added in v1.5.2
func (t *TenantCodeWithCommonN) Scan(value interface{}) error
func (TenantCodeWithCommonN) UpdateClauses ¶ added in v1.5.2
func (t TenantCodeWithCommonN) UpdateClauses(f *schema.Field) []clause.Interface
type TenantCodeWithCommonR ¶ added in v1.5.2
type TenantCodeWithCommonR string //非root可以看,不可写
func (TenantCodeWithCommonR) CreateClauses ¶ added in v1.5.2
func (t TenantCodeWithCommonR) CreateClauses(f *schema.Field) []clause.Interface
func (TenantCodeWithCommonR) DeleteClauses ¶ added in v1.5.2
func (t TenantCodeWithCommonR) DeleteClauses(f *schema.Field) []clause.Interface
func (TenantCodeWithCommonR) GetAuthIDs ¶ added in v1.5.2
func (t TenantCodeWithCommonR) GetAuthIDs(f *schema.Field) stores.GetValues
func (TenantCodeWithCommonR) QueryClauses ¶ added in v1.5.2
func (t TenantCodeWithCommonR) QueryClauses(f *schema.Field) []clause.Interface
func (*TenantCodeWithCommonR) Scan ¶ added in v1.5.2
func (t *TenantCodeWithCommonR) Scan(value interface{}) error
func (TenantCodeWithCommonR) UpdateClauses ¶ added in v1.5.2
func (t TenantCodeWithCommonR) UpdateClauses(f *schema.Field) []clause.Interface
Click to show internal directories.
Click to hide internal directories.