Skip to content

Commit 013514d

Browse files
committed
feat: add policy to get sessions for a given subject
1 parent 2c02fc4 commit 013514d

File tree

2 files changed

+138
-0
lines changed

2 files changed

+138
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package diamond.policy.subject_session
2+
3+
import data.diamond.policy.admin
4+
import data.diamond.policy.token
5+
import rego.v1
6+
7+
beamlines contains beamline if {
8+
some p in data.diamond.data.subjects[token.claims.fedid].permissions
9+
some beamline in object.get(data.diamond.data.admin, p, [])
10+
}
11+
12+
tags contains to_number(tag) if {
13+
"super_admin" in data.diamond.data.subjects[token.claims.fedid].permissions
14+
some tag in object.keys(data.diamond.data.sessions)
15+
}
16+
17+
tags contains to_number(tag) if {
18+
some tag in data.diamond.data.subjects[token.claims.fedid].sessions
19+
}
20+
21+
tags contains to_number(tag) if {
22+
some beamline in beamlines
23+
some tag in data.diamond.data.beamlines[beamline].sessions
24+
}
25+
26+
read_scopes := {
27+
"read:metadata",
28+
"read:data",
29+
}
30+
31+
all_scopes := {
32+
"read:metadata",
33+
"read:data",
34+
"write:metadata",
35+
"write:data",
36+
"delete:revision",
37+
"delete:node",
38+
"create",
39+
"register",
40+
}
41+
42+
scopes contains scope if {
43+
"blueapi" in token.claims.aud
44+
some scope in all_scopes
45+
}
46+
47+
scopes contains scope if {
48+
some scope in read_scopes
49+
}
50+
51+
default allow := false
52+
53+
# Allow to modify and create tiled node if the sessions are accessible to the user
54+
allow if {
55+
every tag in input.access_blob.tags {
56+
to_number(tag) in tags
57+
}
58+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package diamond.policy.subject_session_test
2+
3+
import data.diamond.policy.subject_session
4+
5+
import rego.v1
6+
7+
diamond_data := {
8+
"subjects": {
9+
"alice": {
10+
"permissions": [],
11+
"proposals": [1],
12+
"sessions": [1, 2],
13+
},
14+
"carol": {
15+
"permissions": ["super_admin"],
16+
"proposals": [],
17+
"sessions": [],
18+
},
19+
"oscar": {
20+
"permissions": ["b07_admin"],
21+
"proposals": [],
22+
"sessions": [],
23+
},
24+
},
25+
"sessions": {
26+
"11": {
27+
"beamline": "i03",
28+
"proposal_number": 1,
29+
"visit_number": 1,
30+
},
31+
"12": {
32+
"beamline": "b07",
33+
"proposal_number": 1,
34+
"visit_number": 2,
35+
},
36+
},
37+
"proposals": {"1": {"sessions": {
38+
"1": 11,
39+
"2": 12,
40+
}}},
41+
"beamlines": {"i03": {"sessions": [11]}, "b07": {"sessions": [12]}},
42+
"admin": {"b07_admin": ["b07"]},
43+
}
44+
45+
test_tags_for_super_admin if {
46+
subject_session.tags == {11, 12} with data.diamond.data as diamond_data
47+
with data.diamond.policy.token.claims as {"fedid": "carol"}
48+
}
49+
50+
test_tags_form_subject_sessions if {
51+
subject_session.tags == {1, 2} with data.diamond.data as diamond_data
52+
with data.diamond.policy.token.claims as {"fedid": "alice"}
53+
}
54+
55+
test_tags_from_subject_beamline_permissions if {
56+
subject_session.tags == {12} with data.diamond.data as diamond_data
57+
with data.diamond.policy.token.claims as {"fedid": "oscar"}
58+
}
59+
60+
test_scopes_for_subject if {
61+
subject_session.scopes == subject_session.read_scopes with data.diamond.data as diamond_data
62+
with data.diamond.policy.token.claims as {"fedid": "oscar"}
63+
}
64+
65+
test_scopes_for_subject_all_scopes_if_blueapi if {
66+
subject_session.scopes == subject_session.all_scopes with data.diamond.data as diamond_data
67+
with data.diamond.policy.token.claims as {"fedid": "oscar", "aud": ["blueapi"]}
68+
}
69+
70+
test_allow if {
71+
subject_session.allow with data.diamond.data as diamond_data
72+
with data.diamond.policy.token.claims as {"fedid": "carol"}
73+
with input as {"access_blob": {"tags": ["11", "12"]}}
74+
}
75+
76+
test_allow_denied if {
77+
not subject_session.allow with data.diamond.data as diamond_data
78+
with data.diamond.policy.token.claims as {"fedid": "carol"}
79+
with input as {"access_blob": {"tags": ["1"]}}
80+
}

0 commit comments

Comments
 (0)