Вы не можете этого сделать.
Но ничто из этого не гарантирует, что только один пользователь использует этот логин и что эти 105 IP со всего мира принадлежат не только одному уникальному пользователю, который использует прокси-сервер или что-то еще.
И последнее: вам никогда не понадобится это в Интернет.
UPD
Однако я прошу ограничить использование несколькими пользователями одной и той же учетной записи, которая, как я считаю, должна быть возможной
blockquote>Таким образом, вы можете сохранить некоторый токен, который будет содержать некоторые зашифрованные данные: IP + секретная строка + пользовательский агент + версия браузера пользователя + пользовательская ОС + любая другая личная информация:
encrypt(IP + "some secret string" + request.user_agent + ...)
. А затем вы можете установить сеанс или файл cookie с этим токеном. И с каждым запросом вы можете его получить: если пользователь тот же? Использует ли он тот же браузер и ту же версию браузера из той же ОС и т. Д.Также вы можете использовать динамические токены: вы меняете токен на каждый запрос, поэтому только один пользователь может использовать систему за сеанс, поскольку каждый запрос токен будет изменен, другой пользователь выйдет из системы, пока его токен будет истек.
Если вы хотите иметь свойство класса домена, которое не сохраняется в базе данных, тогда используйте переходные процессы .
Вот простой пример:
class Thing {
String name
boolean flag
boolean anotherFlag
static transients = ['flag', 'anotherFlag']
}
Что-то, что я взял из одного из видео Grails Берта Беквита, было в классах домена Grails, если вы определяете getter
или setter
, не объявляя сам объект, который сам по умолчанию становится временным объектом. Таким образом, как указано выше, а не все объявления, если у вас было
//This will return the same value
boolean getFlag() {
return someField && someOtherField
}
//so you call `object.flag` or `object.getFlag()`
, это избавляет от необходимости объявлять переходное значение, а также дает вам возможность применить некоторую логику на лету.
Честно говоря, вы используете класс домена для проверки и ввода. Обычно я разделяю и создаю класс проверки в src, чтобы выполнить эту часть, и заставляю класс домена выполнять необработанную работу - и, как говорится, он становится чище