Dynamic model access permissions

Is it possible to make Model readonly based on some condition?
The best way would be to have dynamic model access permissions like this:

<record model="ir.model.access" id="...">
    <field name="perm_write" eval="Eval(...)" pyson="1"/>

Model Access disables menu items New/Copy (Ctrl+N/Shift+Ctrl+D), Record Rules don’t.
In this case users will see their permissions and won’t even try to add/copy records.

Yes using record rules.

And what would be the context of the evaluation? If it is the record than it is the same as record rule.

Record rules are enforced on client side since Manage deletable and writable state from ir.rule on the client side (#9357) · Issues · Tryton / Tryton · GitLab.

We need to disable the “New/Copy” menu items if the “closed” period is selected. Can this be done using record rules?

“New” and “Copy” are linked to the creation access and we can not know which content will be created. So the client can not be proactive for this.