@@ -10,26 +10,26 @@ import future.keywords.every
10
10
# bool_flip lets you assign a value to an inverted bool.
11
11
# You cannot do 'x := !false', but you can do 'x := bool_flip(false)'
12
12
bool_flip (b) = flipped {
13
- b
14
- flipped = false
13
+ b
14
+ flipped = false
15
15
}
16
16
17
17
bool_flip (b) = flipped {
18
- not b
19
- flipped = true
18
+ not b
19
+ flipped = true
20
20
}
21
21
22
22
# perms_grant returns a set of boolean values (true, false).
23
23
# It will only return `bool_flip(perm.negate)` for permissions that affect a given
24
24
# resource_type, resource_id, and action.
25
25
# The empty set is returned if no relevant permissions are found.
26
26
perms_grant (permissions) = grants {
27
- # If there are no permissions, this value is the empty set {}.
28
- grants := { x |
29
- # All permissions ...
30
- perm := permissions[_]
31
- # Such that the permission action, type, and resource_id matches
32
- perm.action in [input.action, " *" ]
27
+ # If there are no permissions, this value is the empty set {}.
28
+ grants := { x |
29
+ # All permissions ...
30
+ perm := permissions[_]
31
+ # Such that the permission action, type, and resource_id matches
32
+ perm.action in [input.action, " *" ]
33
33
perm.resource_type in [input.object.type, " *" ]
34
34
perm.resource_id in [input.object.id, " *" ]
35
35
x := bool_flip (perm.negate)
@@ -40,23 +40,23 @@ perms_grant(permissions) = grants {
40
40
# result is the default value.
41
41
default site = {}
42
42
site = grant {
43
- # Boolean set for all site wide permissions.
43
+ # Boolean set for all site wide permissions.
44
44
grant = { v | # Use set comprehension to remove dulpicate values
45
45
# For each role, grab the site permission.
46
46
# Find the grants on this permission list.
47
- v = perms_grant (input.subject.roles[_].site)[_]
47
+ v = perms_grant (input.subject.roles[_].site)[_]
48
48
}
49
49
}
50
50
51
51
default user = {}
52
52
user = grant {
53
- # Only apply user permissions if the user owns the resource
53
+ # Only apply user permissions if the user owns the resource
54
54
input.object.owner != " "
55
- input.object.owner == input.subject.id
55
+ input.object.owner == input.subject.id
56
56
grant = { v | # Use set comprehension to remove dulpicate values
57
57
# For each role, grab the user permissions.
58
58
# Find the grants on this permission list.
59
- v = perms_grant (input.subject.roles[_].user)[_]
59
+ v = perms_grant (input.subject.roles[_].user)[_]
60
60
}
61
61
}
62
62
@@ -67,19 +67,19 @@ user = grant {
67
67
# org_member returns the set of permissions associated with a user if the user is a member of the
68
68
# organization
69
69
org_member = grant {
70
- input.object.org_owner != " "
70
+ input.object.org_owner != " "
71
71
grant = { v |
72
- v = perms_grant (input.subject.roles[_].org[input.object.org_owner])[_]
72
+ v = perms_grant (input.subject.roles[_].org[input.object.org_owner])[_]
73
73
}
74
74
}
75
75
76
76
# If a user is not part of an organization, 'org_non_member' is set to true
77
77
org_non_member {
78
- input.object.org_owner != " "
79
- # Identify if the user is in the org
78
+ input.object.org_owner != " "
79
+ # Identify if the user is in the org
80
80
roles := input.subject.roles
81
81
every role in roles {
82
- not role.org[input.object.org_owner]
82
+ not role.org[input.object.org_owner]
83
83
}
84
84
}
85
85
@@ -90,12 +90,12 @@ org_non_member {
90
90
# It is important both rules cannot be true, as the `org` rules cannot produce multiple outputs.
91
91
default org = []
92
92
org = set {
93
- not org_non_member
94
- set = org_member
93
+ not org_non_member
94
+ set = org_member
95
95
}
96
96
97
97
org = set {
98
- org_non_member
98
+ org_non_member
99
99
set = {false }
100
100
}
101
101
@@ -106,17 +106,17 @@ org = set {
106
106
107
107
# site allow
108
108
allow {
109
- # No site wide deny
109
+ # No site wide deny
110
110
not false in site
111
111
# And all permissions are positive
112
112
site[_]
113
113
}
114
114
115
115
# org allow
116
116
allow {
117
- # No site or org deny
117
+ # No site or org deny
118
118
not false in site
119
- not false in org
119
+ not false in org
120
120
# And all permissions are positive
121
121
org[_]
122
122
}
@@ -125,7 +125,7 @@ allow {
125
125
allow {
126
126
# No site, org, or user deny
127
127
not false in site
128
- not false in org
128
+ not false in org
129
129
not false in user
130
130
# And all permissions are positive
131
131
user[_]
0 commit comments