From 385ab967b58826942272e0f2bcb775e761142255 Mon Sep 17 00:00:00 2001 From: what Date: Sat, 22 Apr 2023 02:31:16 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E4=B8=B4=E6=97=B6=E5=A4=84=E7=90=86?= =?UTF-8?q?=20GetRolesCondition?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base/resource.go | 117 +++++++++++++++++++++++------------------------ 1 file changed, 58 insertions(+), 59 deletions(-) diff --git a/base/resource.go b/base/resource.go index 954c677..13affac 100644 --- a/base/resource.go +++ b/base/resource.go @@ -10,7 +10,6 @@ import ( "github.com/samber/lo" "git.fsdpf.net/go/contracts" - "git.fsdpf.net/go/contracts/helper" "git.fsdpf.net/go/contracts/res_type" "git.fsdpf.net/go/db" ) @@ -207,77 +206,77 @@ func (this Resource) WithRolesCondition(b *db.Builder, roles ...string) { // 获取鉴权条件 func (this Resource) GetRolesCondition(u contracts.User) *db.Builder { - isFullRight := false - isFullNot := false + // isFullRight := false + // isFullNot := false - NewOrmConditionByRes := do.MustInvoke[helper.NewOrmConditionByRes](this.container) - NewOrmJoin := do.MustInvoke[helper.NewOrmJoin](this.container) - GetResRelations := do.MustInvoke[GetResRelations](this.container) - GetResource := do.MustInvoke[contracts.GetResource](this.container) - GetResConditions := do.MustInvoke[GetResConditions](this.container) + // NewOrmJoin := do.MustInvoke[helper.NewOrmJoin](this.container) + // GetResRelations := do.MustInvoke[GetResRelations](this.container) + // GetResource := do.MustInvoke[contracts.GetResource](this.container) + // GetResConditions := do.MustInvoke[GetResConditions](this.container) + // GetOrmConditionByRes := do.MustInvoke[GetOrmConditionByRes](this.container) - roles := do.MustInvoke[GetResRoles](this.container)(this.GetUuid()) + // roles := do.MustInvoke[GetResRoles](this.container)(this.GetUuid()) - subTables := lo.Reduce(roles, func(carry string, item ResRole, _ int) string { - db := this.GetDB().Table(string(this.GetTable()), this.GetCode()).Select(db.Raw("`" + this.GetCode() + "`.*")) + // subTables := lo.Reduce(roles, func(carry string, item ResRole, _ int) string { + // db := this.GetDB().Table(string(this.GetTable()), this.GetCode()).Select(db.Raw("`" + this.GetCode() + "`.*")) - joins := lo.Filter(GetResRelations(item.Uuid), func(item ResRelation, _ int) bool { - return item.Type == "inner" || item.Type == "left" || item.Type == "right" - }) + // joins := lo.Filter(GetResRelations(item.Uuid), func(item ResRelation, _ int) bool { + // return item.Type == "inner" || item.Type == "left" || item.Type == "right" + // }) - conditions := NewOrmConditionByRes(GetResConditions(item.Uuid)) + // conditions := GetOrmConditionByRes(GetResConditions(item.Uuid)) - for i := 0; i < len(joins); i++ { - oResource, ok := GetResource(joins[i].ResourceCode) - if !ok { - continue - } - join := NewOrmJoin(contracts.RelationType(joins[i].Type), oResource, joins[i].Code, joins[i].RelationResource, joins[i].RelationField, joins[i].RelationForeignKey) - // 关联扩展条件 - join.SetCondition(NewOrmConditionByRes(GetResConditions(joins[i].Uuid))) - join.Inject(db, nil) - } + // for i := 0; i < len(joins); i++ { + // oResource, ok := GetResource(joins[i].ResourceCode) + // if !ok { + // continue + // } + // join := NewOrmJoin(contracts.RelationType(joins[i].Type), oResource, joins[i].Code, joins[i].RelationResource, joins[i].RelationField, joins[i].RelationForeignKey) + // // 关联扩展条件 + // join.SetCondition(GetOrmConditionByRes(GetResConditions(joins[i].Uuid))) + // join.Inject(db, nil) + // } - if len(joins) == 0 && conditions.IsEmpty() { - // 无权限, 直接跳过这个 unoin 语句 - if carry != "" { - return carry - } - // 第一个无权限除外, 避免所有用户所属角色都是无权限 - db.WhereRaw("false") - isFullNot = true - } else if len(joins) == 0 && conditions.IsNotEmpty() && conditions.IsRight() /* 1=1 的这种条件*/ { - // 只要有1个满权限, 直接返回单条语句 - isFullRight = true - return db.ToSql() - } else if conditions.IsNotEmpty() { - db.WhereRaw(string(conditions.ToSql(nil))) + // if len(joins) == 0 && conditions.IsEmpty() { + // // 无权限, 直接跳过这个 unoin 语句 + // if carry != "" { + // return carry + // } + // // 第一个无权限除外, 避免所有用户所属角色都是无权限 + // db.WhereRaw("false") + // isFullNot = true + // } else if len(joins) == 0 && conditions.IsNotEmpty() && conditions.IsRight() /* 1=1 的这种条件*/ { + // // 只要有1个满权限, 直接返回单条语句 + // isFullRight = true + // return db.ToSql() + // } else if conditions.IsNotEmpty() { + // db.WhereRaw(string(conditions.ToSql(nil))) - // 如果前面是无权限的sql查看, 这直接返回本次查询 - if isFullNot { - isFullNot = false - return db.ToSql() - } - } + // // 如果前面是无权限的sql查看, 这直接返回本次查询 + // if isFullNot { + // isFullNot = false + // return db.ToSql() + // } + // } - if carry != "" { - carry += " union " - } + // if carry != "" { + // carry += " union " + // } - carry += db.ToSql() + // carry += db.ToSql() - return carry - }, "") + // return carry + // }, "") - // @todo this.GetCode 要换成 alias + // // @todo this.GetCode 要换成 alias - if isFullRight { - this.GetDB().Table(string(this.GetTable()), this.GetCode()) - } else if isFullNot { - this.GetDB().Table(string(this.GetTable()), this.GetCode()).WhereRaw("false") - } else if subTables != "" { - this.GetDB().Table(subTables, this.GetCode()) - } + // if isFullRight { + // this.GetDB().Table(string(this.GetTable()), this.GetCode()) + // } else if isFullNot { + // this.GetDB().Table(string(this.GetTable()), this.GetCode()).WhereRaw("false") + // } else if subTables != "" { + // this.GetDB().Table(subTables, this.GetCode()) + // } return this.GetDB().Table(string(this.GetTable()), this.GetCode()) }