Feature #17493
Updated by Peter Amstutz about 3 years ago
Feature: user can put a project tree in "archive" state which makes it read-only to everyone
Proposed design:
* New attribute of group "archive_at"
* Users with can_manage access can modify "archive_at"
** "archive_at" field itself can be modified when null or "now < archive_at"
** Once "now >= archive_at" the archive_at field cannot be modified by users, only admins
* Cutoff means one of these things, need to decide which:
** Read-only behavior takes effect when "now >= archive_at", if "now < archive_at" users with write access can continue to make updates.
** Read-only when archive_at is non-null, *but* if "now < archive_at" a user with can_manage permission is allowed to clear "archive_at" to make updates.
* "archived" state applies to everything owned by the project, recursively. (same behavior as "trashed" projects)
* Archived objects are read-only for users and admins regardless of permissions (with limited exceptions for the archived_at field itself described above)
** Cannot create/move objects in an archived project (owner_uuid cannot be an archived project)
** Cannot move objects out of an archived project (owner_uuid cannot be changed)
** Cannot update any other field on archived objects, e.g. name, manifest_text
** Cannot delete objects owned by archived project or modify trash_at, delete_at
** Setting "archive" clears any "delete_at" fields of any object in the archived project
** Objects that were trashed before remain trashed, but will not be deleted
* Users with can_manage permission can still adjust sharing (create and remove permission links on archived objects)