Public or Private Resources

Applications with shared or collaborative resources—like documents, code, or comments—may need a concept of public visibility, meaning they can be read by anyone.

A "public" attribute on a resource can be used to indicate that it is public.

Implement the logic

Public repositories are visible to anyone, so we write a rule that says that all users have permission to read a resource if it's public.

actor User { }
resource Repository {
permissions = ["read"];
"read" if is_public(resource);

Test it out

If the Anvil repository is public, anyone can read it.

test "public repositories" {
setup {
assert allow(User{"alice"}, "read", Repository{"anvil"});