Grails: рандомизированные авто идентификаторы - PullRequest
4 голосов
/ 15 февраля 2012

При установке rails по умолчанию при сохранении первого объекта домена он выдает необычный случайный идентификатор, например 785787634 или что-то в этом роде.Grails дает 1.

Каков предпочтительный метод создания трудно угадываемых и маловероятных для пересечения автоматически генерируемых идентификаторов в Grails?

Ответы [ 2 ]

5 голосов
/ 15 февраля 2012

Grails позволяет настроить генератор идентификаторов. см http://grails.org/doc/latest/guide/GORM.html#identity

В вашем случае вы можете рассмотреть «uuid» или «guid»

4 голосов
/ 16 февраля 2012

Другой способ сделать это - использовать идентификаторы по умолчанию, как указано, но затем добавить выделенный столбец, используя UUID, когда вам нужен публичный (незащищенный) доступ к элементу.

Я думаю,это будет работать очень хорошо:

class Widget {
    String uuid

    static constraints = {
        uuid unique: true
    }

    def beforeInsert() {
        // optionally, replace the dashes by adding .replaceAll('-','')
        uuid = UUID.randomUUID().toString()
    }
}

Тогда вы можете использовать контроллер следующим образом:

// url: app/public/widget/48b5451a-0d21-4a36-bcc0-88b129852f1b

PublicController {
    def widget() {
        Widget w = Widget.findByUuid(params.id)
        ...
    }
}

Он индексируется автоматически, поэтому он не слишком медленный, и UUID используется толькопри публичном поиске виджета.Если у вас есть человек, вошедший в систему, вы можете выполнить проверки безопасности и просто использовать app/widget/edit/1 или что-то подобное.

Я бы не стал полагаться на "случайное число" как на защищенное любым способом.Угадывание чисел работает, даже если числа не последовательные.Угадать UUID практически невозможно, сравнительно.Однако, если у вас есть учетные записи с логином, проверки авторизации лучше всего подходят.

...