Initial public import
[afterthought.git] / acls / Slices2.acl
1 (* Match requests where the caller is not an admin *) 
2 /REQUEST/caller['admin' not in @roles]->{
3     valid_slice_ids = /REQUEST/caller/@slice_ids;
4     /REQUEST/caller[@roles=='pi']->{
5         /REQUEST/Add -> {
6             [ count(/REQUEST/caller/Site/@slice_ids) >= @max_slices
7                         and /REQUEST/caller/Site/@enabled]
8         }
9         /REQUEST/Delete 
10         /REQUEST/Update -> {
11             /[not not @peer_id] -> { /[false] }
12             whitelist = /node/@slice_ids_whitelist;
13             _ -> {
14                      /[/REQUEST/caller/@person_id in @person_ids
15                         or ('pi' in //REQUEST/caller/@roles and @site_id in //REQUEST/caller/@site_ids)
16                         and (not whitelist or @slice_id in whitelist)]
17                  }
18         }
19         /REQUEST/Get {
20             caller_site_ids = /REQUEST/caller/@site_ids;
21             valid_slice_ids = /DB/sites[@site_id in caller_site_ids]/@slice_ids;
22             /[@slice_id in valid_slice_ids]
23         }
24     }
25     _ -> / [false]
26 }
27
28 _ {
29    / [true]
30 }
31
32 (* XXX:
33     Not covered:
34         - Accepted fields for AddSlice, including tags
35         - Check slice name format
36     Changes:
37         - Assuming that the node whitelist goes into the slice
38 *)