Skip to content

Commit b75034e

Browse files
committed
Change authorization logic against rhsso
1 parent 63270c2 commit b75034e

File tree

2 files changed

+24
-19
lines changed

2 files changed

+24
-19
lines changed

pkg/auth/rhsso_authz_handler.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -76,16 +76,15 @@ func (a *AuthzHandler) OwnedBy(ctx context.Context, db *gorm.DB, resource Resour
7676
return db, nil
7777
}
7878
if a.isOcmAuthzEnabled() {
79-
accessibleClusterIDs, err := a.listAccessibleResource(ocm.UserNameFromContext(ctx), ocm.AMSActionGet, ClusterResource)
79+
allowedClusterID, allowedClusterUuids, err := a.listAccessibleResource(ocm.UserNameFromContext(ctx), ocm.AMSActionGet, ClusterResource)
8080
if err != nil {
8181
return nil, err
8282
}
83-
query := "id"
8483
if resource != ClusterResource {
85-
query = "cluster_id"
84+
return db.Where("cluster_id IN ?", allowedClusterID), nil
8685
}
8786

88-
return db.Where(query+"IN ?", accessibleClusterIDs), nil
87+
return db.Where("id IN ? OR openshift_cluster_id IN ?", allowedClusterID, allowedClusterUuids), nil
8988
}
9089
if a.isTenancyEnabled() {
9190
return db.Where("org_id = ?", ocm.OrgIDFromContext(ctx)), nil
@@ -106,10 +105,11 @@ func (a *AuthzHandler) OwnedByUser(ctx context.Context, db *gorm.DB, resource Re
106105
return nil, err
107106
}
108107

109-
if username == "" {
110-
return res, nil
108+
if username != "" {
109+
res = res.Where("user_name = ?", username)
111110
}
112-
return res.Where("user_name = ?", username), nil
111+
112+
return res, nil
113113
}
114114

115115
func (a *AuthzHandler) isObjectOwnedByUser(id string, obj interface{}, payload *ocm.AuthPayload) (bool, error) {
@@ -152,7 +152,7 @@ func (a *AuthzHandler) hasSubscriptionAccess(clusterId string, action string, pa
152152
return true, nil
153153
}
154154

155-
if a.isTenancyEnabled() {
155+
if a.isTenancyEnabled() || a.isOcmAuthzEnabled() {
156156
var cluster common.Cluster
157157
err = a.db.Select("ams_subscription_id", "openshift_cluster_id", "kind").
158158
First(&cluster, "id = ?", clusterId).Error
@@ -401,7 +401,7 @@ func (a *AuthzHandler) allowedToUseAssistedInstaller(username string) (bool, err
401401
context.Background(), username, ocm.AMSActionCreate, "", ocm.BareMetalClusterResource)
402402
}
403403

404-
func (a *AuthzHandler) listAccessibleResource(username, action, resource string) ([]string, error) {
404+
func (a *AuthzHandler) listAccessibleResource(username, action, resource string) ([]string, []string, error) {
405405
return a.client.Authorization.ResourceReview(
406406
context.Background(), username, action, resource)
407407
}

pkg/ocm/authorization.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313

1414
//go:generate mockgen -source=authorization.go -package=ocm -destination=mock_authorization.go
1515
type OCMAuthorization interface {
16-
ResourceReview(ctx context.Context, username, action, resourceType string) (allowed []string, err error)
16+
ResourceReview(ctx context.Context, username, action, resourceType string) (clusterIds []string, clusterUuids []string, err error)
1717
AccessReview(ctx context.Context, username, action, subscriptionId, resourceType string) (allowed bool, err error)
1818
CapabilityReview(ctx context.Context, username, capabilityName, capabilityType string) (allowed bool, err error)
1919
}
@@ -22,7 +22,7 @@ type authorization struct {
2222
client *Client
2323
}
2424

25-
func (a authorization) ResourceReview(ctx context.Context, username, action, resourceType string) (allowed []string, err error) {
25+
func (a authorization) ResourceReview(ctx context.Context, username, action, resourceType string) (clusterIds []string, clusterUuids []string, err error) {
2626
defer commonutils.MeasureOperation("OCM-ResourceReview", a.client.log, a.client.metricsApi)()
2727
resourceReview := a.client.connection.Authorizations().V1().ResourceReview()
2828

@@ -33,7 +33,7 @@ func (a authorization) ResourceReview(ctx context.Context, username, action, res
3333

3434
request, err := requestBuilder.Build()
3535
if err != nil {
36-
return nil, err
36+
return nil, nil, err
3737
}
3838

3939
postResp, err := resourceReview.Post().
@@ -43,25 +43,30 @@ func (a authorization) ResourceReview(ctx context.Context, username, action, res
4343
if postResp != nil {
4444
a.client.logger.Error(context.Background(), "Fail to send ResourceReview. Response: %v", postResp)
4545
if postResp.Status() >= 400 && postResp.Status() < 500 {
46-
return nil, common.NewInfraError(http.StatusUnauthorized, err)
46+
return nil, nil, common.NewInfraError(http.StatusUnauthorized, err)
4747
}
4848
if postResp.Status() >= 500 {
49-
return nil, common.NewApiError(http.StatusServiceUnavailable, err)
49+
return nil, nil, common.NewApiError(http.StatusServiceUnavailable, err)
5050
}
5151
}
52-
return nil, common.NewApiError(http.StatusServiceUnavailable, err)
52+
return nil, nil, common.NewApiError(http.StatusServiceUnavailable, err)
5353
}
5454

5555
response, ok := postResp.GetReview()
5656
if !ok {
57-
return nil, errors.Errorf("Empty response from authorization post request")
57+
return nil, nil, errors.Errorf("Empty response from authorization post request")
5858
}
5959

60-
clusterIDs, ok := response.GetClusterIDs()
60+
clusterIds, ok = response.GetClusterIDs()
6161
if !ok {
62-
return nil, errors.Errorf("Failed to get cluster IDs from the response")
62+
return nil, nil, errors.Errorf("Failed to get cluster IDs from the response")
6363
}
64-
return clusterIDs, nil
64+
65+
clusterUuids, ok = response.GetClusterUUIDs()
66+
if !ok {
67+
return nil, nil, errors.Errorf("Failed to get cluster UUIDs from the response")
68+
}
69+
return clusterIds, clusterUuids, nil
6570
}
6671

6772
func (a authorization) AccessReview(ctx context.Context, username, action, subscriptionId, resourceType string) (allowed bool, err error) {

0 commit comments

Comments
 (0)