Skip to content

Commit 4f21cde

Browse files
authz: support empty principals and fix rbac authenticated matcher (#4883)
* authz: support empty principals in SDK and fixes to rbac authenticated matcher. * Minor formatting * Remove pointer from principals fields * resolving comments
1 parent f00baa6 commit 4f21cde

File tree

6 files changed

+255
-31
lines changed

6 files changed

+255
-31
lines changed

authz/rbac_translator.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,20 @@ func parsePrincipalNames(principalNames []string) []*v3rbacpb.Principal {
155155
}
156156

157157
func parsePeer(source peer) (*v3rbacpb.Principal, error) {
158-
if len(source.Principals) > 0 {
159-
return principalOr(parsePrincipalNames(source.Principals)), nil
158+
if source.Principals == nil {
159+
return &v3rbacpb.Principal{
160+
Identifier: &v3rbacpb.Principal_Any{
161+
Any: true,
162+
},
163+
}, nil
160164
}
161-
return &v3rbacpb.Principal{
162-
Identifier: &v3rbacpb.Principal_Any{
163-
Any: true,
164-
},
165-
}, nil
165+
if len(source.Principals) == 0 {
166+
return &v3rbacpb.Principal{
167+
Identifier: &v3rbacpb.Principal_Authenticated_{
168+
Authenticated: &v3rbacpb.Principal_Authenticated{},
169+
}}, nil
170+
}
171+
return principalOr(parsePrincipalNames(source.Principals)), nil
166172
}
167173

168174
func parsePaths(paths []string) []*v3rbacpb.Permission {

authz/rbac_translator_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,32 @@ func TestTranslatePolicy(t *testing.T) {
205205
},
206206
},
207207
},
208+
"empty principal field": {
209+
authzPolicy: `{
210+
"name": "authz",
211+
"allow_rules": [{
212+
"name": "allow_authenticated",
213+
"source": {"principals":[]}
214+
}]
215+
}`,
216+
wantPolicies: []*v3rbacpb.RBAC{
217+
{
218+
Action: v3rbacpb.RBAC_ALLOW,
219+
Policies: map[string]*v3rbacpb.Policy{
220+
"authz_allow_authenticated": {
221+
Principals: []*v3rbacpb.Principal{
222+
{Identifier: &v3rbacpb.Principal_Authenticated_{
223+
Authenticated: &v3rbacpb.Principal_Authenticated{},
224+
}},
225+
},
226+
Permissions: []*v3rbacpb.Permission{
227+
{Rule: &v3rbacpb.Permission_Any{Any: true}},
228+
},
229+
},
230+
},
231+
},
232+
},
233+
},
208234
"unknown field": {
209235
authzPolicy: `{"random": 123}`,
210236
wantErr: "failed to unmarshal policy",

0 commit comments

Comments
 (0)