2012-02-15 2 views
4

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

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

+0

Преимущество последовательных автоматически генерируемых идентификаторов заключается в том, что он уменьшает сложность вставки в кластеризованный индекс. Вызов случайного идентификатора «лучше» субъективен. –

+0

Это можно сделать так: http://danlynn.com/grails/grails-gorm-and-uuids/ –

+0

Я слышал, что UUID может повлиять на производительность. Прежде чем вы выберете его, вы можете захотеть сделать отметку –

ответ

4

Другой способ сделать это было бы использовать идентификаторы по умолчанию, как это предусмотрено, но затем добавить выделенный столбец с помощью 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 почти невозможно, сравнительно. Однако, если у вас есть учетные записи с логином, проверки авторизации лучше всего.

+0

На самом деле меня меньше беспокоит безопасность, так как я пересекаюсь. Возможно, я собираюсь сделать это неправильно. Я попытаюсь изолировать проблемы, которые у меня есть, и задать новый вопрос. – Mikey