Skip to content

Commit 42866f3

Browse files
committed
Trying to make the code even smaller. Might be too much
1 parent 4946897 commit 42866f3

File tree

2 files changed

+61
-73
lines changed

2 files changed

+61
-73
lines changed

coderd/authz/authz_test.go

Lines changed: 48 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -12,80 +12,64 @@ var nilSet = authztest.Set{nil}
1212
func Test_ExhaustiveAuthorize(t *testing.T) {
1313
all := authztest.GroupedPermissions(authztest.AllPermissions())
1414
variants := permissionVariants(all)
15+
var total int
1516
for name, v := range variants {
1617
fmt.Printf("%s: %d\n", name, v.Size())
18+
total += v.Size()
1719
}
20+
fmt.Println(total)
1821
}
1922

2023
func permissionVariants(all authztest.SetGroup) map[string]*authztest.Role {
21-
// an is any noise above the impactful set
22-
an := abstain
23-
// ln is any noise below the impactful set
24-
ln := positive | negative | abstain
25-
2624
// Cases are X+/- where X indicates the level where the impactful set is.
2725
// The impactful set determines the result.
28-
return map[string]*authztest.Role{
29-
// Wild
30-
"W+": authztest.NewRole(
31-
pos(all.Wildcard()),
32-
noise(ln, all.Site(), all.Org(), all.User()),
33-
),
34-
"W-": authztest.NewRole(
35-
neg(all.Wildcard()),
36-
noise(ln, all.Site(), all.Org(), all.User()),
37-
),
38-
// Site
39-
"S+": authztest.NewRole(
40-
noise(an, all.Wildcard()),
41-
pos(all.Site()),
42-
noise(ln, all.Org(), all.User()),
43-
),
44-
"S-": authztest.NewRole(
45-
noise(an, all.Wildcard()),
46-
neg(all.Site()),
47-
noise(ln, all.Org(), all.User()),
48-
),
49-
// TODO: Figure out cross org noise between org:* and org:mem
50-
// Org:*
51-
"O+": authztest.NewRole(
52-
noise(an, all.Wildcard(), all.Site()),
53-
pos(all.Org()),
54-
noise(ln, all.User()),
55-
),
56-
"O-": authztest.NewRole(
57-
noise(an, all.Wildcard(), all.Site()),
58-
neg(all.Org()),
59-
noise(ln, all.User()),
60-
),
61-
// Org:Mem
62-
"M+": authztest.NewRole(
63-
noise(an, all.Wildcard(), all.Site()),
64-
pos(all.OrgMem()),
65-
noise(ln, all.User()),
66-
),
67-
"M-": authztest.NewRole(
68-
noise(an, all.Wildcard(), all.Site()),
69-
neg(all.OrgMem()),
70-
noise(ln, all.User()),
71-
),
72-
// User
73-
"U+": authztest.NewRole(
74-
noise(an, all.Wildcard(), all.Site(), all.Org()),
75-
pos(all.User()),
76-
),
77-
"U-": authztest.NewRole(
78-
noise(an, all.Wildcard(), all.Site(), all.Org()),
79-
neg(all.User()),
80-
),
81-
}
26+
variants := make(map[string]*authztest.Role)
27+
assignVariants(variants, "W", authztest.LevelWildKey, all)
28+
assignVariants(variants, "S", authztest.LevelSiteKey, all)
29+
assignVariants(variants, "O", authztest.LevelOrgKey, all)
30+
assignVariants(variants, "M", authztest.LevelOrgMemKey, all)
31+
assignVariants(variants, "U", authztest.LevelUserKey, all)
32+
return variants
33+
}
34+
35+
func assignVariants(m map[string]*authztest.Role, name string, lvl authztest.LevelKey, all authztest.SetGroup) {
36+
vs := levelVariants(lvl, all)
37+
m[name+"+"] = vs[0]
38+
m[name+"-"] = vs[1]
8239
}
8340

84-
func l() {
85-
//authztest.Levels
86-
//noise(an, all.Wildcard()),
87-
// neg(all.Site()),
88-
// noise(ln, all.Org(), all.User()),
41+
func levelVariants(lvl authztest.LevelKey, all authztest.SetGroup) []*authztest.Role {
42+
ordered := []authztest.LevelKey{
43+
authztest.LevelWildKey,
44+
authztest.LevelSiteKey,
45+
// TODO: @emyrk orgs are special where the noise flags have to change
46+
// since these two levels are the same. The current code does
47+
// not handle this correctly.
48+
authztest.LevelOrgKey,
49+
authztest.LevelOrgMemKey,
50+
authztest.LevelUserKey,
51+
}
52+
53+
noiseFlag := abstain
54+
sets := make([]authztest.Iterable, 0)
55+
for _, l := range ordered {
56+
if l == lvl {
57+
noiseFlag = positive | negative | abstain
58+
continue
59+
}
60+
sets = append(sets, noise(noiseFlag, all.Level(l)))
61+
}
62+
63+
// clone the sets so we can get 2 sets. One for positive, one for negative
64+
clone := make([]authztest.Iterable, len(sets))
65+
copy(clone, sets)
66+
p := append(clone, pos(all.Level(lvl)))
67+
n := append(sets, neg(all.Level(lvl)))
68+
69+
return []*authztest.Role{
70+
authztest.NewRole(p...),
71+
authztest.NewRole(n...),
72+
}
8973
}
9074

9175
// pos returns the positive impactful variant for a given level. It does not

coderd/authz/authztest/level.go

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ package authztest
22

33
import "github.com/coder/coder/coderd/authz"
44

5-
type level string
5+
type LevelKey string
66

77
const (
8-
LevelWildKey level = "level-wild"
9-
LevelSiteKey level = "level-site"
10-
LevelOrgKey level = "level-org"
11-
LevelOrgMemKey level = "level-org:mem"
8+
LevelWildKey LevelKey = "level-wild"
9+
LevelSiteKey LevelKey = "level-site"
10+
LevelOrgKey LevelKey = "level-org"
11+
LevelOrgMemKey LevelKey = "level-org:mem"
1212
// LevelOrgAllKey is a helper to get both org levels above
13-
LevelOrgAllKey level = "level-org:*"
14-
LevelUserKey level = "level-user"
13+
LevelOrgAllKey LevelKey = "level-org:*"
14+
LevelUserKey LevelKey = "level-user"
1515
)
1616

1717
// LevelGroup is all permissions for a given level
@@ -43,7 +43,7 @@ func (lg LevelGroup) Abstain() Set {
4343

4444
func GroupedPermissions(perms Set) SetGroup {
4545
groups := make(SetGroup)
46-
allLevelKeys := []level{LevelWildKey, LevelSiteKey, LevelOrgKey, LevelOrgMemKey, LevelOrgAllKey, LevelUserKey}
46+
allLevelKeys := []LevelKey{LevelWildKey, LevelSiteKey, LevelOrgKey, LevelOrgMemKey, LevelOrgAllKey, LevelUserKey}
4747

4848
for _, l := range allLevelKeys {
4949
groups[l] = make(LevelGroup)
@@ -71,7 +71,11 @@ func GroupedPermissions(perms Set) SetGroup {
7171
return groups
7272
}
7373

74-
type SetGroup map[level]LevelGroup
74+
type SetGroup map[LevelKey]LevelGroup
75+
76+
func (s SetGroup) Level(k LevelKey) LevelGroup {
77+
return s[k]
78+
}
7579

7680
func (s SetGroup) Wildcard() LevelGroup {
7781
return s[LevelWildKey]

0 commit comments

Comments
 (0)