Skip to content

Commit

Permalink
feat: 模板新增批量修改权限
Browse files Browse the repository at this point in the history
  • Loading branch information
Ambition9186 committed Jun 19, 2024
1 parent a630b9f commit 3713995
Show file tree
Hide file tree
Showing 10 changed files with 7,222 additions and 6,544 deletions.
33 changes: 33 additions & 0 deletions bcs-services/bcs-bscp/cmd/config-server/service/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -542,3 +542,36 @@ func (s *Service) BatchUpsertTemplates(ctx context.Context, req *pbcs.BatchUpser
resp := &pbcs.BatchUpsertTemplatesResp{Ids: data.Ids}
return resp, nil
}

// BatchUpdateTemplatePermissions 批量更新模板权限
func (s *Service) BatchUpdateTemplatePermissions(ctx context.Context, req *pbcs.BatchUpdateTemplatePermissionsReq) (
*pbcs.BatchUpdateTemplatePermissionsResp, error) {

grpcKit := kit.FromGrpcContext(ctx)

res := []*meta.ResourceAttribute{
{Basic: meta.Basic{Type: meta.Biz, Action: meta.FindBusinessResource}, BizID: req.BizId},
}

if err := s.authorizer.Authorize(grpcKit, res...); err != nil {
return nil, err
}

if req.User == "" && req.UserGroup == "" && req.Privilege == "" {
return nil, nil
}

resp, err := s.client.DS.BatchUpdateTemplatePermissions(grpcKit.RpcCtx(), &pbds.BatchUpdateTemplatePermissionsReq{
BizId: req.BizId,
TemplateIds: req.TemplateIds,
User: req.User,
UserGroup: req.UserGroup,
Privilege: req.Privilege,
})

if err != nil {
return nil, err
}

return &pbcs.BatchUpdateTemplatePermissionsResp{Ids: resp.Ids}, nil
}
49 changes: 49 additions & 0 deletions bcs-services/bcs-bscp/cmd/data-service/service/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ import (
"strings"
"time"

"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/criteria/errf"
"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/gen"
"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/dal/table"
"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/i18n"
"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/kit"
"github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/logs"
pbbase "github.com/TencentBlueKing/bk-bcs/bcs-services/bcs-bscp/pkg/protocol/core/base"
Expand Down Expand Up @@ -953,3 +955,50 @@ func (s *Service) validateBatchUpsertTemplates(grpcKit *kit.Kit, updateId []uint
}
return oldTemplateData, nil
}

// BatchUpdateTemplatePermissions 批量更新模板权限
func (s *Service) BatchUpdateTemplatePermissions(ctx context.Context, req *pbds.BatchUpdateTemplatePermissionsReq) (
*pbds.BatchUpdateTemplatePermissionsResp, error) {

kt := kit.FromGrpcContext(ctx)

// 获取最新的模板配置
tmps, err := s.dao.TemplateRevision().ListLatestRevisionsGroupByTemplateIds(kt, req.GetTemplateIds())
if err != nil {
return nil, errf.Errorf(errf.DBOpFailed,
i18n.T(kt, fmt.Sprintf("lists the latest version by template ids failed, err: %s", err.Error())))
}

toCreate := make([]*table.TemplateRevision, 0)
for _, v := range tmps {
v.Spec.RevisionName = tools.GenerateRevisionName()
if req.User != "" {
v.Spec.Permission.User = req.User
}
if req.UserGroup != "" {
v.Spec.Permission.UserGroup = req.UserGroup
}
if req.Privilege != "" {
v.Spec.Permission.Privilege = req.Privilege
}
v.Revision = &table.CreatedRevision{
Creator: kt.User,
CreatedAt: time.Now().UTC(),
}
toCreate = append(toCreate, &table.TemplateRevision{
Spec: v.Spec,
Attachment: v.Attachment,
Revision: v.Revision,
})
}
if err := s.dao.TemplateRevision().BatchCreate(kt, toCreate); err != nil {
return nil, errf.Errorf(errf.DBOpFailed,
i18n.T(kt, fmt.Sprintf("batch update of template permissions failed, err: %s", err.Error())))
}

ids := []uint32{}
for _, v := range toCreate {
ids = append(ids, v.ID)
}
return &pbds.BatchUpdateTemplatePermissionsResp{Ids: ids}, nil
}
33 changes: 24 additions & 9 deletions bcs-services/bcs-bscp/pkg/dal/dao/template_revision.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ type TemplateRevision interface {
BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx, revisions []*table.TemplateRevision) error
// ListLatestRevisionsGroupByTemplateIds Lists the latest version groups by template ids
ListLatestRevisionsGroupByTemplateIds(kit *kit.Kit, templateIDs []uint32) ([]*table.TemplateRevision, error)
// BatchCreate batch create template revisions.
BatchCreate(kit *kit.Kit, revisions []*table.TemplateRevision) error
}

var _ TemplateRevision = new(templateRevisionDao)
Expand All @@ -64,6 +66,25 @@ type templateRevisionDao struct {
auditDao AuditDao
}

// BatchCreate batch create template revisions.
func (dao *templateRevisionDao) BatchCreate(kit *kit.Kit, revisions []*table.TemplateRevision) error {
if len(revisions) == 0 {
return nil
}
ids, err := dao.idGen.Batch(kit, table.TemplateRevisionsTable, len(revisions))
if err != nil {
return err
}
for i, item := range revisions {
if err := item.ValidateCreate(); err != nil {
return err
}
item.ID = ids[i]
}

return dao.genQ.TemplateRevision.WithContext(kit.Ctx).CreateInBatches(revisions, 200)
}

// Create one template revision instance.
func (dao *templateRevisionDao) Create(kit *kit.Kit, g *table.TemplateRevision) (uint32, error) {
if err := g.ValidateCreate(); err != nil {
Expand Down Expand Up @@ -289,21 +310,15 @@ func (dao *templateRevisionDao) BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx,
}

// ListLatestRevisionsGroupByTemplateIds Lists the latest version groups by template ids
// nolint
func (dao *templateRevisionDao) ListLatestRevisionsGroupByTemplateIds(kit *kit.Kit,
templateIDs []uint32) ([]*table.TemplateRevision, error) {
m := dao.genQ.TemplateRevision
// 根据templateIDs获取一列最大 templateRevisionIDs
// 再通过最大 templateRevisionIDs 获取 templateRevision 数据
var templateRevisionIDs []struct {
Id uint32
}
err := m.WithContext(kit.Ctx).
Select(m.ID.Max().As("id")).
Where(m.TemplateID.In(templateIDs...)).
var templateRevisionIDs []struct{ Id uint32 }
if err := m.WithContext(kit.Ctx).Select(m.ID.Max().As("id")).Where(m.TemplateID.In(templateIDs...)).
Group(m.TemplateID).
Scan(&templateRevisionIDs)
if err != nil {
Scan(&templateRevisionIDs); err != nil {
return nil, err
}
ids := []uint32{}
Expand Down
Loading

0 comments on commit 3713995

Please sign in to comment.