@@ -12,80 +12,64 @@ var nilSet = authztest.Set{nil}
12
12
func Test_ExhaustiveAuthorize (t * testing.T ) {
13
13
all := authztest .GroupedPermissions (authztest .AllPermissions ())
14
14
variants := permissionVariants (all )
15
+ var total int
15
16
for name , v := range variants {
16
17
fmt .Printf ("%s: %d\n " , name , v .Size ())
18
+ total += v .Size ()
17
19
}
20
+ fmt .Println (total )
18
21
}
19
22
20
23
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
-
26
24
// Cases are X+/- where X indicates the level where the impactful set is.
27
25
// 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 ]
82
39
}
83
40
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
+ }
89
73
}
90
74
91
75
// pos returns the positive impactful variant for a given level. It does not
0 commit comments