bugfix:scoperesource FilterByOwner

1.调度标签 和 优化建议 FilterByOwner 逻辑调整
This commit is contained in:
zhaoxiangchun
2020-10-10 11:58:31 +08:00
parent b11e472706
commit c0eae040a8
6 changed files with 88 additions and 33 deletions
-26
View File
@@ -116,34 +116,8 @@ func (m *SScopedResourceBaseManager) FilterByOwner(q *sqlchemy.SQuery, userCred
}
switch scope {
case rbacutils.ScopeDomain:
/* q = q.Filter(sqlchemy.OR(
// share to system
sqlchemy.AND(
sqlchemy.IsNullOrEmpty(q.Field("domain_id")),
sqlchemy.IsNullOrEmpty(q.Field("tenant_id")),
),
// share to this domain or its sub-projects
sqlchemy.Equals(q.Field("domain_id"), userCred.GetProjectDomainId()),
)) */
q = q.Equals("domain_id", userCred.GetProjectDomainId())
case rbacutils.ScopeProject:
/* q = q.Filter(sqlchemy.OR(
// share to system
sqlchemy.AND(
sqlchemy.IsNullOrEmpty(q.Field("domain_id")),
sqlchemy.IsNullOrEmpty(q.Field("tenant_id")),
),
// share to project's parent domain
sqlchemy.AND(
sqlchemy.Equals(q.Field("domain_id"), userCred.GetProjectDomainId()),
sqlchemy.IsNullOrEmpty(q.Field("tenant_id")),
),
// share to this project
sqlchemy.AND(
sqlchemy.Equals(q.Field("domain_id"), userCred.GetProjectDomainId()),
sqlchemy.Equals(q.Field("tenant_id"), userCred.GetProjectId()),
),
)) */
q = q.Equals("tenant_id", userCred.GetProjectId())
}
return q
+37
View File
@@ -140,6 +140,43 @@ func (manager *SSchedtagManager) AllowListItems(ctx context.Context, userCred mc
return true
}
func (m *SSchedtagManager) FilterByOwner(q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery {
if userCred == nil {
return q
}
switch scope {
case rbacutils.ScopeDomain:
q = q.Filter(sqlchemy.OR(
// share to system
sqlchemy.AND(
sqlchemy.IsNullOrEmpty(q.Field("domain_id")),
//sqlchemy.IsNullOrEmpty(q.Field("tenant_id")),
),
// share to this domain or its sub-projects
sqlchemy.Equals(q.Field("domain_id"), userCred.GetProjectDomainId()),
))
case rbacutils.ScopeProject:
q = q.Filter(sqlchemy.OR(
// share to system
sqlchemy.AND(
sqlchemy.IsNullOrEmpty(q.Field("domain_id")),
sqlchemy.IsNullOrEmpty(q.Field("tenant_id")),
),
// share to project's parent domain
sqlchemy.AND(
sqlchemy.Equals(q.Field("domain_id"), userCred.GetProjectDomainId()),
sqlchemy.IsNullOrEmpty(q.Field("tenant_id")),
),
// share to this project
sqlchemy.AND(
sqlchemy.Equals(q.Field("domain_id"), userCred.GetProjectDomainId()),
sqlchemy.Equals(q.Field("tenant_id"), userCred.GetProjectId()),
),
))
}
return q
}
// 调度标签列表
func (manager *SSchedtagManager) ListItemFilter(
ctx context.Context,
+2 -2
View File
@@ -55,7 +55,7 @@ type SAlertManager struct {
//db.SVirtualResourceBaseManager
db.SEnabledResourceBaseManager
db.SStatusStandaloneResourceBaseManager
db.SScopedResourceBaseManager
SMonitorScopedResourceManager
//db.SStatusResourceBaseManager
tester AlertTestRunner
@@ -112,7 +112,7 @@ type SAlert struct {
//db.SVirtualResourceBase
db.SEnabledResourceBase
db.SStatusStandaloneResourceBase
db.SScopedResourceBase
SMonitorScopedResource
//db.SStatusResourceBase
// Frequency is evaluate period
+2 -2
View File
@@ -21,14 +21,14 @@ var (
type SAlertRecordManager struct {
db.SEnabledResourceBaseManager
db.SStatusStandaloneResourceBaseManager
db.SScopedResourceBaseManager
SMonitorScopedResourceManager
}
type SAlertRecord struct {
//db.SVirtualResourceBase
db.SEnabledResourceBase
db.SStatusStandaloneResourceBase
db.SScopedResourceBase
SMonitorScopedResource
AlertId string `width:"36" charset:"ascii" nullable:"false" list:"user" create:"required"`
Level string `charset:"ascii" width:"36" nullable:"false" default:"normal" list:"user" update:"user"`
@@ -0,0 +1,44 @@
package models
import (
"context"
"yunion.io/x/jsonutils"
"yunion.io/x/onecloud/pkg/cloudcommon/db"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/util/rbacutils"
"yunion.io/x/sqlchemy"
)
type SMonitorScopedResourceManager struct {
db.SScopedResourceBaseManager
}
type SMonitorScopedResource struct {
db.SScopedResourceBase
}
func (m *SMonitorScopedResourceManager) FilterByOwner(q *sqlchemy.SQuery, userCred mcclient.IIdentityProvider, scope rbacutils.TRbacScope) *sqlchemy.SQuery {
if userCred == nil {
return q
}
switch scope {
case rbacutils.ScopeDomain:
q = q.Equals("domain_id", userCred.GetProjectDomainId())
case rbacutils.ScopeProject:
q = q.Equals("tenant_id", userCred.GetProjectId())
}
return q
}
func (manager *SMonitorScopedResourceManager) ResourceScope() rbacutils.TRbacScope {
return manager.SScopedResourceBaseManager.ResourceScope()
}
func (manager *SMonitorScopedResourceManager) FetchOwnerId(ctx context.Context, data jsonutils.JSONObject) (mcclient.IIdentityProvider, error) {
return manager.SScopedResourceBaseManager.FetchOwnerId(ctx, data)
}
func (model *SMonitorScopedResource) GetOwnerId() mcclient.IIdentityProvider {
return model.SScopedResourceBase.GetOwnerId()
}
+3 -3
View File
@@ -52,12 +52,12 @@ func init() {
// +onecloud:swagger-gen-model-plural=suggestsysruleconfigs
type SSuggestSysRuleConfigManager struct {
db.SStandaloneResourceBaseManager
db.SScopedResourceBaseManager
SMonitorScopedResourceManager
}
type SSuggestSysRuleConfig struct {
db.SStandaloneResourceBase
db.SScopedResourceBase
SMonitorScopedResource
// RuleId is SSuggestSysRule model object id
// RuleId string `width:"36" charset:"ascii" nullable:"true" list:"user" create:"optional"`
@@ -166,7 +166,7 @@ func (man *SSuggestSysRuleConfigManager) createFromDriver(ctx context.Context, s
}
config.SetModelManager(man, config)
ownerId := config.GetOwnerId()
ownerId := config.SMonitorScopedResource.GetOwnerId()
data := monitor.SuggestSysRuleConfigCreateInput{}
data.Scope = string(scope)
data.ProjectDomainId = ownerId.GetProjectDomainId()