Я, я бы закодировал его в классе домена, эмулируя способ, которым GORM предлагает вам аннотировать классы домена (static access = [field1: "ROLE_USER", field2: "ROLE_ADMIN,ROLE_USER"]
в качестве примера). Затем создайте метод, который ваш контроллер может использовать для редактирования их для данного пользователя. Этот метод может использовать аннотации класса домена, чтобы решить, как его редактировать. Затем метапрограммируйте его на каждый из классов доменов, как это делают плагины.
Аналогично, напишите противоположный метод, чтобы ограничить привязки данных параметров в классе домена, напишите свой собственный служебный метод привязки данных, а затем запрограммируйте его также на каждый класс домена.
Тогда вы можете просто использовать instance.redact(user)
или instance.bindData(params, user)
, чтобы делать то, что вы хотите, и это практически декларативный синтаксис.