@@ -10,11 +10,11 @@ import (
10
10
11
11
"k8s.io/kubernetes/pkg/admission"
12
12
"k8s.io/kubernetes/pkg/api/meta"
13
+ "k8s.io/kubernetes/pkg/api/unversioned"
13
14
"k8s.io/kubernetes/pkg/apimachinery/registered"
14
15
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
15
- "k8s.io/kubernetes/pkg/util/sets"
16
16
17
- "github.com/openshift/origin/pkg/api"
17
+ authorizationapi "github.com/openshift/origin/pkg/authorization /api"
18
18
oadmission "github.com/openshift/origin/pkg/cmd/server/admission"
19
19
"github.com/openshift/origin/pkg/project/cache"
20
20
projectutil "github.com/openshift/origin/pkg/project/util"
@@ -33,10 +33,17 @@ type lifecycle struct {
33
33
cache * cache.ProjectCache
34
34
35
35
// creatableResources is a set of resources that can be created even if the namespace is terminating
36
- creatableResources sets. String
36
+ creatableResources map [unversioned. GroupResource ] bool
37
37
}
38
38
39
- var recommendedCreatableResources = sets .NewString ("resourceaccessreviews" , "localresourceaccessreviews" )
39
+ var recommendedCreatableResources = map [unversioned.GroupResource ]bool {
40
+ authorizationapi .Resource ("resourceaccessreviews" ): true ,
41
+ authorizationapi .Resource ("localresourceaccessreviews" ): true ,
42
+ authorizationapi .Resource ("subjectaccessreviews" ): true ,
43
+ authorizationapi .Resource ("localsubjectaccessreviews" ): true ,
44
+ authorizationapi .Resource ("selfsubjectrulesreviews" ): true ,
45
+ authorizationapi .Resource ("subjectrulesreviews" ): true ,
46
+ }
40
47
var _ = oadmission .WantsProjectCache (& lifecycle {})
41
48
var _ = oadmission .Validator (& lifecycle {})
42
49
@@ -46,9 +53,8 @@ func (e *lifecycle) Admit(a admission.Attributes) (err error) {
46
53
if len (a .GetNamespace ()) == 0 {
47
54
return nil
48
55
}
49
- // always allow a SAR request through, the SAR will return information about
50
- // the ability to take action on the object, no need to verify it here.
51
- if isSubjectAccessReview (a ) {
56
+ // always allow creatable resources through. These requests should always be allowed.
57
+ if e .creatableResources [a .GetResource ().GroupResource ()] {
52
58
return nil
53
59
}
54
60
@@ -117,18 +123,9 @@ func (e *lifecycle) Validate() error {
117
123
return nil
118
124
}
119
125
120
- func NewLifecycle (client clientset.Interface , creatableResources sets. String ) (admission.Interface , error ) {
126
+ func NewLifecycle (client clientset.Interface , creatableResources map [unversioned. GroupResource ] bool ) (admission.Interface , error ) {
121
127
return & lifecycle {
122
128
client : client ,
123
129
creatableResources : creatableResources ,
124
130
}, nil
125
131
}
126
-
127
- var (
128
- sar = api .Kind ("SubjectAccessReview" )
129
- lsar = api .Kind ("LocalSubjectAccessReview" )
130
- )
131
-
132
- func isSubjectAccessReview (a admission.Attributes ) bool {
133
- return a .GetKind ().GroupKind () == sar || a .GetKind ().GroupKind () == lsar
134
- }
0 commit comments