Объявление логических значений в доменном классе без появления в базе данных

Вы не можете этого сделать.

  • Вы можете управлять IP-адресами пользователя, поэтому вы можете предотвратить присутствие пользователя из двух IP за раз. И вы можете связать логин и IP-адрес.
  • Вы можете установить файлы cookie для управления чем-то другим.

Но ничто из этого не гарантирует, что только один пользователь использует этот логин и что эти 105 IP со всего мира принадлежат не только одному уникальному пользователю, который использует прокси-сервер или что-то еще.

И последнее: вам никогда не понадобится это в Интернет.

UPD

Однако я прошу ограничить использование несколькими пользователями одной и той же учетной записи, которая, как я считаю, должна быть возможной

Таким образом, вы можете сохранить некоторый токен, который будет содержать некоторые зашифрованные данные: IP + секретная строка + пользовательский агент + версия браузера пользователя + пользовательская ОС + любая другая личная информация: encrypt(IP + "some secret string" + request.user_agent + ...). А затем вы можете установить сеанс или файл cookie с этим токеном. И с каждым запросом вы можете его получить: если пользователь тот же? Использует ли он тот же браузер и ту же версию браузера из той же ОС и т. Д.

Также вы можете использовать динамические токены: вы меняете токен на каждый запрос, поэтому только один пользователь может использовать систему за сеанс, поскольку каждый запрос токен будет изменен, другой пользователь выйдет из системы, пока его токен будет истек.

0
задан Sulteric 18 March 2019 в 14:24
поделиться

2 ответа

Если вы хотите иметь свойство класса домена, которое не сохраняется в базе данных, тогда используйте переходные процессы .

Вот простой пример:

class Thing {
   String name
   boolean flag
   boolean anotherFlag
   static transients = ['flag', 'anotherFlag']
}
0
ответ дан Joshua Moore 18 March 2019 в 14:24
поделиться

Что-то, что я взял из одного из видео Grails Берта Беквита, было в классах домена Grails, если вы определяете getter или setter, не объявляя сам объект, который сам по умолчанию становится временным объектом. Таким образом, как указано выше, а не все объявления, если у вас было

//This will return the same value
boolean getFlag() { 
  return someField && someOtherField 
}
//so you call `object.flag` or `object.getFlag()`

, это избавляет от необходимости объявлять переходное значение, а также дает вам возможность применить некоторую логику на лету.

Честно говоря, вы используете класс домена для проверки и ввода. Обычно я разделяю и создаю класс проверки в src, чтобы выполнить эту часть, и заставляю класс домена выполнять необработанную работу - и, как говорится, он становится чище

0
ответ дан Vahid 18 March 2019 в 14:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: