Instances of some types do not make sense to be created as top level objects.
For example, it makes sense to add a new Z8/Function. It does not make sense to add a new Z3/Key or a new Zxx/Boolean.
It can make sense to limit some types, such as Zxx/Language or Z6/String as top level objects to a specific user right.
The community should be able to decide which types are allowed and which are blocked.
Maybe the creation of a type itself should be a specific user right too, similar to the creation of properties in Wikidata. Maybe a community process for new types makes sense, so we don't end up with two dozen integer types without planning.
So the standard right for a contributor should be to create instances of the 'normal' types at any time, whereas some types might be associated with further rights.
This task is about designing a solution for this, and then create tasks about the implementation.