Skip to content

Commit

Permalink
feat(model): add permission field in model object (#576)
Browse files Browse the repository at this point in the history
Because

- Allow query user to know what operation can be performed on the
queried model

This commit

- add permission field in model object
  • Loading branch information
heiruwu committed May 21, 2024
1 parent ea5a85e commit 2d36a58
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 16 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ require (
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0
github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1
github.com/iancoleman/strcase v0.3.0
github.com/instill-ai/protogen-go v0.3.3-alpha.0.20240516204150-9fe7016753ed
github.com/instill-ai/protogen-go v0.3.3-alpha.0.20240521161711-af99b826b207
github.com/instill-ai/usage-client v0.2.4-alpha.0.20240123081026-6c78d9a5197a
github.com/instill-ai/x v0.4.0-alpha
github.com/knadh/koanf v1.5.0
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -1314,8 +1314,8 @@ github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH
github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/instill-ai/protogen-go v0.3.3-alpha.0.20240516204150-9fe7016753ed h1:w//eTrCswd6yKfoOOuynpDCQjdpEco9SiIJ/sX6eM0A=
github.com/instill-ai/protogen-go v0.3.3-alpha.0.20240516204150-9fe7016753ed/go.mod h1:2blmpUwiTwxIDnrjIqT6FhR5ewshZZF554wzjXFvKpQ=
github.com/instill-ai/protogen-go v0.3.3-alpha.0.20240521161711-af99b826b207 h1:HIICqyngAMGcFTJwa10AOmAGSDEtTmFvPGfPXOzLeyU=
github.com/instill-ai/protogen-go v0.3.3-alpha.0.20240521161711-af99b826b207/go.mod h1:2blmpUwiTwxIDnrjIqT6FhR5ewshZZF554wzjXFvKpQ=
github.com/instill-ai/usage-client v0.2.4-alpha.0.20240123081026-6c78d9a5197a h1:gmy8BcCFDZQan40c/D3f62DwTYtlCwi0VrSax+pKffw=
github.com/instill-ai/usage-client v0.2.4-alpha.0.20240123081026-6c78d9a5197a/go.mod h1:EpX3Yr661uWULtZf5UnJHfr5rw2PDyX8ku4Kx0UtYFw=
github.com/instill-ai/x v0.4.0-alpha h1:zQV2VLbSHjMv6gyBN/2mwwrvWk0/mJM6ZKS12AzjfQg=
Expand Down
47 changes: 45 additions & 2 deletions pkg/service/convert.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"image/jpeg"
"image/png"
"strings"
"sync"
"time"

"github.com/gabriel-vasile/mimetype"
Expand All @@ -23,6 +24,7 @@ import (
"google.golang.org/protobuf/types/known/timestamppb"

"github.com/instill-ai/model-backend/internal/resource"
"github.com/instill-ai/model-backend/pkg/constant"
"github.com/instill-ai/model-backend/pkg/datamodel"

custom_logger "github.com/instill-ai/model-backend/pkg/logger"
Expand Down Expand Up @@ -140,7 +142,7 @@ func (s *service) PBToDBModel(ctx context.Context, ns resource.Namespace, pbMode
}, nil
}

func (s *service) DBToPBModel(ctx context.Context, modelDef *datamodel.ModelDefinition, dbModel *datamodel.Model) (*modelPB.Model, error) {
func (s *service) DBToPBModel(ctx context.Context, modelDef *datamodel.ModelDefinition, dbModel *datamodel.Model, checkPermission bool) (*modelPB.Model, error) {
logger, _ := custom_logger.GetZapLogger(ctx)

ownerName, err := s.ConvertOwnerPermalinkToName(dbModel.Owner)
Expand All @@ -152,6 +154,8 @@ func (s *service) DBToPBModel(ctx context.Context, modelDef *datamodel.ModelDefi
return nil, err
}

ctxUserUID := resource.GetRequestSingleHeader(ctx, constant.HeaderUserUIDKey)

profileImage := fmt.Sprintf("%s/model/v1alpha/%s/models/%s/image", s.instillCoreHost, ownerName, dbModel.ID)
pbModel := modelPB.Model{
Name: fmt.Sprintf("%s/models/%s", ownerName, dbModel.ID),
Expand Down Expand Up @@ -191,12 +195,50 @@ func (s *service) DBToPBModel(ctx context.Context, modelDef *datamodel.ModelDefi
ProfileImage: &profileImage,
}

var wg sync.WaitGroup
wg.Add(2)
pbModel.Permission = &modelPB.Permission{}
go func() {
defer wg.Done()
if !checkPermission {
return
}
if strings.Split(dbModel.Owner, "/")[1] == ctxUserUID {
pbModel.Permission.CanEdit = true
return
}

canEdit, err := s.aclClient.CheckPermission(ctx, "model_", dbModel.UID, "writer")
if err != nil {
return
}
pbModel.Permission.CanEdit = canEdit
}()
go func() {
defer wg.Done()
if !checkPermission {
return
}
if strings.Split(dbModel.Owner, "/")[1] == ctxUserUID {
pbModel.Permission.CanTrigger = true
return
}

canTrigger, err := s.aclClient.CheckPermission(ctx, "model_", dbModel.UID, "executor")
if err != nil {
return
}
pbModel.Permission.CanTrigger = canTrigger
}()

wg.Wait()

appendSampleInputOutput(&pbModel)

return &pbModel, nil
}

func (s *service) DBToPBModels(ctx context.Context, dbModels []*datamodel.Model) ([]*modelPB.Model, error) {
func (s *service) DBToPBModels(ctx context.Context, dbModels []*datamodel.Model, checkPermission bool) ([]*modelPB.Model, error) {

pbModels := make([]*modelPB.Model, len(dbModels))

Expand All @@ -210,6 +252,7 @@ func (s *service) DBToPBModels(ctx context.Context, dbModels []*datamodel.Model)
ctx,
modelDef,
dbModels[idx],
checkPermission,
)
if err != nil {
return nil, err
Expand Down
22 changes: 11 additions & 11 deletions pkg/service/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ type Service interface {
ConvertOwnerNameToPermalink(name string) (string, error)
ConvertRepositoryNameToRscName(repositoryName string) (string, error)
PBToDBModel(ctx context.Context, ns resource.Namespace, pbModel *modelPB.Model) (*datamodel.Model, error)
DBToPBModel(ctx context.Context, modelDef *datamodel.ModelDefinition, dbModel *datamodel.Model) (*modelPB.Model, error)
DBToPBModels(ctx context.Context, dbModels []*datamodel.Model) ([]*modelPB.Model, error)
DBToPBModel(ctx context.Context, modelDef *datamodel.ModelDefinition, dbModel *datamodel.Model, checkPermission bool) (*modelPB.Model, error)
DBToPBModels(ctx context.Context, dbModels []*datamodel.Model, checkPermission bool) ([]*modelPB.Model, error)
DBToPBModelDefinition(ctx context.Context, dbModelDefinition *datamodel.ModelDefinition) (*modelPB.ModelDefinition, error)
DBToPBModelDefinitions(ctx context.Context, dbModelDefinitions []*datamodel.ModelDefinition) ([]*modelPB.ModelDefinition, error)

Expand Down Expand Up @@ -273,7 +273,7 @@ func (s *service) GetModelByUID(ctx context.Context, modelUID uuid.UUID, view mo
return nil, err
}

return s.DBToPBModel(ctx, modelDef, dbModel)
return s.DBToPBModel(ctx, modelDef, dbModel, true)
}

func (s *service) GetModelByIDAdmin(ctx context.Context, ns resource.Namespace, modelID string, view modelPB.View) (*modelPB.Model, error) {
Expand All @@ -288,7 +288,7 @@ func (s *service) GetModelByIDAdmin(ctx context.Context, ns resource.Namespace,
return nil, err
}

return s.DBToPBModel(ctx, modelDef, dbModel)
return s.DBToPBModel(ctx, modelDef, dbModel, true)
}

func (s *service) GetModelByUIDAdmin(ctx context.Context, modelUID uuid.UUID, view modelPB.View) (*modelPB.Model, error) {
Expand All @@ -303,7 +303,7 @@ func (s *service) GetModelByUIDAdmin(ctx context.Context, modelUID uuid.UUID, vi
return nil, err
}

return s.DBToPBModel(ctx, modelDef, dbModel)
return s.DBToPBModel(ctx, modelDef, dbModel, true)
}

func (s *service) GetNamespaceModelByID(ctx context.Context, ns resource.Namespace, modelID string, view modelPB.View) (*modelPB.Model, error) {
Expand All @@ -326,7 +326,7 @@ func (s *service) GetNamespaceModelByID(ctx context.Context, ns resource.Namespa
return nil, err
}

return s.DBToPBModel(ctx, modelDef, dbModel)
return s.DBToPBModel(ctx, modelDef, dbModel, true)
}

func (s *service) CreateNamespaceModel(ctx context.Context, ns resource.Namespace, model *datamodel.Model) error {
Expand Down Expand Up @@ -598,7 +598,7 @@ func (s *service) ListModels(ctx context.Context, pageSize int32, pageToken stri
if err != nil {
return nil, 0, "", err
}
pbModels, err := s.DBToPBModels(ctx, dbModels)
pbModels, err := s.DBToPBModels(ctx, dbModels, true)
return pbModels, int32(totalSize), nextPageToken, err
}

Expand Down Expand Up @@ -640,7 +640,7 @@ func (s *service) ListNamespaceModels(ctx context.Context, ns resource.Namespace
return nil, 0, "", err
}

pbModels, err := s.DBToPBModels(ctx, dbModels)
pbModels, err := s.DBToPBModels(ctx, dbModels, true)
return pbModels, int32(ps), pt, err
}

Expand Down Expand Up @@ -695,7 +695,7 @@ func (s *service) ListModelsAdmin(ctx context.Context, pageSize int32, pageToken
return nil, 0, "", err
}

pbModels, err := s.DBToPBModels(ctx, dbModels)
pbModels, err := s.DBToPBModels(ctx, dbModels, true)

return pbModels, int32(totalSize), nextPageToken, err
}
Expand Down Expand Up @@ -778,7 +778,7 @@ func (s *service) RenameNamespaceModelByID(ctx context.Context, ns resource.Name
return nil, err
}

return s.DBToPBModel(ctx, modelDef, updatedDBModel)
return s.DBToPBModel(ctx, modelDef, updatedDBModel, true)
}

func (s *service) UpdateNamespaceModelByID(ctx context.Context, ns resource.Namespace, modelID string, toUpdateModel *modelPB.Model, reDeploy bool) (*modelPB.Model, error) {
Expand Down Expand Up @@ -845,7 +845,7 @@ func (s *service) UpdateNamespaceModelByID(ctx context.Context, ns resource.Name
}
}

return s.DBToPBModel(ctx, modelDef, updatedDBModel)
return s.DBToPBModel(ctx, modelDef, updatedDBModel, true)
}

func (s *service) GetModelDefinition(ctx context.Context, id string) (*modelPB.ModelDefinition, error) {
Expand Down

0 comments on commit 2d36a58

Please sign in to comment.