Yes, it all makes sense.
So a relatively simple thing would be to address your first concern you listed: if a page is listed as CENSORED, don’t show it or any of its children. That’s a UI-only change. I think it is safe to make – I can imagine some people may have a situation like yours, in which case some pages that are currently accessible to people would no longer be shown. But it is hard to imagine that anyone is happy with the current behavior, so it’s reasonable to change.
I relayed this fix to the dev team.
For actually controlling pages without the “add inaccessible table” workaround, I can’t think of a good way without using Access Rules, because in some cases you’ll need to specify who should see the page. “Just owners” may be a common answer, but not the only one people will want, and access rules is where we have a mechanism for specifying “who” flexibly.
For the rest, let me describe a couple of ideas how to hide pages better.
One is the idea have “personal pages”, i.e. pages that you create for yourself and can come back to, that are not shared with anyone else. (Simple to understand, but could get annoying if you’d like to let someone else use this page without sharing it with everyone else.)
The other is a very flexible idea…
- Imagine we have a concept of “Access tags”. By default, there is only one such tag, called “Owners only”.
- In access rules, there is a section for them, and you can add other tags, and specify rules for each. E.g. for “Owners only” (the tag that would exist by default), the conditions would be: if
user.Access == OWNERS
, give permission All
; for all others give the permission None
.
- In the page menu, you could “Set access tag”. If you set it to “Owners only”, only owners will see it. You could specify another tag if you created a different one.
In implementation, it would use a helper table, like _grist_AccessTags
, with a row per access tag, containing just a name. When you set an access tag on a page, the page record would get a reference to the access tag record. When the document is served, access rules would determine which permission applies to each access tag, and apply the same permission to any page that refers to that access tag.
In theory, this could then be extended to allow setting access tags on other bits of the UI, e.g. on a page widget, or a field within a widget. In practice, I don’t know if anyone needs that.