Skip to content

Commit d7e8d56

Browse files
authored
Fix namespace access review api (#334)
Signed-off-by: Tamal Saha <tamal@appscode.com>
1 parent 77c793a commit d7e8d56

File tree

2 files changed

+73
-13
lines changed
  • cmd/objectfinder-tester
  • pkg/registry/identity/selfsubjectnamespaceaccessreview

2 files changed

+73
-13
lines changed

cmd/objectfinder-tester/main.go

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package main
1919

2020
import (
2121
"context"
22+
"encoding/json"
2223
"errors"
2324
"fmt"
2425

@@ -43,6 +44,7 @@ import (
4344
rbacauthz "kmodules.xyz/authorizer/apiserver"
4445
clustermeta "kmodules.xyz/client-go/cluster"
4546
"kmodules.xyz/resource-metadata/apis/identity/v1alpha1"
47+
identityapi "kmodules.xyz/resource-metadata/apis/identity/v1alpha1"
4648
rsapi "kmodules.xyz/resource-metadata/apis/meta/v1alpha1"
4749
"kmodules.xyz/resource-metadata/hub/resourcedescriptors"
4850
"kmodules.xyz/resource-metadata/hub/resourceoutlines"
@@ -400,7 +402,7 @@ func findForPostgres() error {
400402
return nil
401403
}
402404

403-
func main() {
405+
func main_5() {
404406
kc, rtc, err := NewClient()
405407
if err != nil {
406408
panic(err)
@@ -457,3 +459,54 @@ func main_6() {
457459
}
458460
fmt.Printf("%+v\n", result)
459461
}
462+
463+
func main() {
464+
// /Users/tamal/Downloads/rancher-spoke.yaml
465+
466+
kc, rtc, err := NewClient()
467+
if err != nil {
468+
panic(err)
469+
}
470+
471+
s := selfsubjectnamespaceaccessreview.NewStorage(kc, rtc)
472+
473+
ctx := context.TODO()
474+
ctx = apirequest.WithNamespace(ctx, "ace")
475+
ctx = apirequest.WithUser(ctx, &user.DefaultInfo{
476+
Name: "u-ct92n",
477+
UID: "",
478+
Groups: []string{
479+
"system:authenticated",
480+
"system:cattle:authenticated",
481+
},
482+
Extra: map[string][]string{
483+
"principalid": {"local://u-ct92n"},
484+
"username": {"tamal-project-a"},
485+
},
486+
})
487+
488+
in := &identityapi.SelfSubjectNamespaceAccessReview{
489+
TypeMeta: metav1.TypeMeta{},
490+
ObjectMeta: metav1.ObjectMeta{},
491+
Spec: identityapi.SelfSubjectNamespaceAccessReviewSpec{
492+
ResourceAttributes: []authorization.ResourceAttributes{
493+
{
494+
Namespace: "",
495+
Verb: "list",
496+
Group: "kubedb.com",
497+
Version: "*",
498+
Resource: "kafkas",
499+
Subresource: "",
500+
Name: "",
501+
},
502+
},
503+
},
504+
}
505+
506+
result, err := s.Create(ctx, in, nil, nil)
507+
if err != nil {
508+
panic(err)
509+
}
510+
data, _ := json.MarshalIndent(result, "", " ")
511+
fmt.Printf("%+v\n", string(data))
512+
}

pkg/registry/identity/selfsubjectnamespaceaccessreview/storage.go

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ func (r *Storage) Create(ctx context.Context, obj runtime.Object, _ rest.Validat
107107

108108
// check for all namespaces
109109
{
110-
allowed, err := r.hasAllNamespaceResourceAccess(ctx, in)
110+
allowed, err := r.hasAllNamespaceResourceAccess(ctx, in, user, extra)
111111
if err != nil {
112112
return nil, err
113113
}
114114
if allowed {
115-
allowed, err = r.hasNonResourceAccess(ctx, in)
115+
allowed, err = r.hasNonResourceAccess(ctx, in, user, extra)
116116
if err != nil {
117117
return nil, err
118118
}
@@ -148,14 +148,18 @@ func (r *Storage) Create(ctx context.Context, obj runtime.Object, _ rest.Validat
148148
return in, nil
149149
}
150150

151-
func (r *Storage) hasNonResourceAccess(ctx context.Context, in *identityapi.SelfSubjectNamespaceAccessReview) (bool, error) {
151+
func (r *Storage) hasNonResourceAccess(ctx context.Context, in *identityapi.SelfSubjectNamespaceAccessReview, user user.Info, extra map[string]authorization.ExtraValue) (bool, error) {
152152
for _, attr := range in.Spec.NonResourceAttributes {
153-
review := &authorization.SelfSubjectAccessReview{
154-
Spec: authorization.SelfSubjectAccessReviewSpec{
153+
review := &authorization.SubjectAccessReview{
154+
Spec: authorization.SubjectAccessReviewSpec{
155155
NonResourceAttributes: &attr,
156+
User: user.GetName(),
157+
Groups: user.GetGroups(),
158+
Extra: extra,
159+
UID: user.GetUID(),
156160
},
157161
}
158-
review, err := r.kc.AuthorizationV1().SelfSubjectAccessReviews().Create(ctx, review, metav1.CreateOptions{})
162+
review, err := r.kc.AuthorizationV1().SubjectAccessReviews().Create(ctx, review, metav1.CreateOptions{})
159163
if err != nil {
160164
return false, err
161165
}
@@ -166,16 +170,19 @@ func (r *Storage) hasNonResourceAccess(ctx context.Context, in *identityapi.Self
166170
return true, nil
167171
}
168172

169-
func (r *Storage) hasAllNamespaceResourceAccess(ctx context.Context, in *identityapi.SelfSubjectNamespaceAccessReview) (bool, error) {
173+
func (r *Storage) hasAllNamespaceResourceAccess(ctx context.Context, in *identityapi.SelfSubjectNamespaceAccessReview, user user.Info, extra map[string]authorization.ExtraValue) (bool, error) {
170174
for _, attr := range in.Spec.ResourceAttributes {
171175
attr.Namespace = ""
172-
review := &authorization.SelfSubjectAccessReview{
173-
Spec: authorization.SelfSubjectAccessReviewSpec{
174-
ResourceAttributes: &attr,
175-
NonResourceAttributes: nil,
176+
review := &authorization.SubjectAccessReview{
177+
Spec: authorization.SubjectAccessReviewSpec{
178+
ResourceAttributes: &attr,
179+
User: user.GetName(),
180+
Groups: user.GetGroups(),
181+
Extra: extra,
182+
UID: user.GetUID(),
176183
},
177184
}
178-
review, err := r.kc.AuthorizationV1().SelfSubjectAccessReviews().Create(ctx, review, metav1.CreateOptions{})
185+
review, err := r.kc.AuthorizationV1().SubjectAccessReviews().Create(ctx, review, metav1.CreateOptions{})
179186
if err != nil {
180187
return false, err
181188
}

0 commit comments

Comments
 (0)