From 6e9366f5691cd483e68abca5a1062023b570481e Mon Sep 17 00:00:00 2001 From: Rain Date: Wed, 22 Apr 2020 20:23:56 +0800 Subject: [PATCH] fix(region): Add implements about owner for ScalingPolicy and ScalingActivity --- pkg/compute/models/scaling_activity.go | 36 +++++++++++++++++++++++--- pkg/compute/models/scaling_policy.go | 36 +++++++++++++++++++++++--- 2 files changed, 64 insertions(+), 8 deletions(-) diff --git a/pkg/compute/models/scaling_activity.go b/pkg/compute/models/scaling_activity.go index 4ec1b7d662..2750dabe1c 100644 --- a/pkg/compute/models/scaling_activity.go +++ b/pkg/compute/models/scaling_activity.go @@ -62,10 +62,6 @@ func init() { ScalingActivityManager.SetVirtualObject(ScalingActivityManager) } -func (sam *SScalingActivityManager) ResourceScope() rbacutils.TRbacScope { - return rbacutils.ScopeProject -} - func (sam *SScalingActivityManager) FetchByStatus(ctx context.Context, saIds, status []string, action string) (ids []string, err error) { q := sam.Query("id").In("id", saIds) if action == "not" { @@ -190,3 +186,35 @@ func (sam *SScalingActivityManager) ListItemFilter(ctx context.Context, q *sqlch q = q.Desc("start_time").Desc("end_time") return q, nil } + +func (sam *SScalingActivityManager) NamespaceScope() rbacutils.TRbacScope { + return rbacutils.ScopeProject +} + +func (sam *SScalingActivityManager) ResourceScope() rbacutils.TRbacScope { + return rbacutils.ScopeProject +} + +func (sam *SScalingActivityManager) FilterByOwner(q *sqlchemy.SQuery, owner mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery { + if owner != nil { + switch scope { + case rbacutils.ScopeProject, rbacutils.ScopeDomain: + scalingGroupQ := ScalingGroupManager.Query("id", "domain_id").SubQuery() + q = q.Join(scalingGroupQ, sqlchemy.Equals(q.Field("scaling_group_id"), scalingGroupQ.Field("id"))) + q = q.Filter(sqlchemy.Equals(scalingGroupQ.Field("domain_id"), owner.GetProjectDomainId())) + } + } + return q +} + +func (sam *SScalingActivityManager) FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) { + return db.FetchDomainInfo(ctx, data) +} + +func (sa *SScalingActivity) GetOwnerId() mcclient.IIdentityProvider { + scalingGroup := sa.GetScalingGroup() + if scalingGroup != nil { + return scalingGroup.GetOwnerId() + } + return nil +} diff --git a/pkg/compute/models/scaling_policy.go b/pkg/compute/models/scaling_policy.go index 2d50d2872a..303c3e8ea4 100644 --- a/pkg/compute/models/scaling_policy.go +++ b/pkg/compute/models/scaling_policy.go @@ -109,10 +109,6 @@ func (spm *SScalingPolicyManager) ListItemFilter(ctx context.Context, q *sqlchem return q, nil } -func (spm *SScalingPolicyManager) ResourceScope() rbacutils.TRbacScope { - return rbacutils.ScopeProject -} - func (spm *SScalingPolicyManager) QueryDistinctExtraField(q *sqlchemy.SQuery, field string) (*sqlchemy.SQuery, error) { q, err := spm.SStatusStandaloneResourceBaseManager.QueryDistinctExtraField(q, field) if err == nil { @@ -518,3 +514,35 @@ func (sg *SScalingPolicy) PostCreate(ctx context.Context, userCred mcclient.Toke }) }() } + +func (spm *SScalingPolicyManager) NamespaceScope() rbacutils.TRbacScope { + return rbacutils.ScopeProject +} + +func (spm *SScalingPolicyManager) ResourceScope() rbacutils.TRbacScope { + return rbacutils.ScopeProject +} + +func (spm *SScalingPolicyManager) FilterByOwner(q *sqlchemy.SQuery, owner mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery { + if owner != nil { + switch scope { + case rbacutils.ScopeProject, rbacutils.ScopeDomain: + scalingGroupQ := ScalingGroupManager.Query("id", "domain_id").SubQuery() + q = q.Join(scalingGroupQ, sqlchemy.Equals(q.Field("scaling_group_id"), scalingGroupQ.Field("id"))) + q = q.Filter(sqlchemy.Equals(scalingGroupQ.Field("domain_id"), owner.GetProjectDomainId())) + } + } + return q +} + +func (spm *SScalingPolicyManager) FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) { + return db.FetchDomainInfo(ctx, data) +} + +func (sp *SScalingPolicy) GetOwnerId() mcclient.IIdentityProvider { + scalingGroup := sp.GetScalingGroup() + if scalingGroup != nil { + return scalingGroup.GetOwnerId() + } + return nil +}