Shiro ключи, хранящиеся в виде строк = точка сбоя или ненужное беспокойство?

#mysql #shiro

#mysql #shiro

Вопрос:

Не вдаваясь в подробности, это вопрос высокого уровня.

Я всегда придерживался идеи, что хранить первичные ключи в местах, где нет ограничений, никогда не является хорошей идеей. Например, хранение первичного ключа в архитектуре в стиле EAV ("USER_ID",144) . Если этот пользователь когда-либо будет удален, это не отразится на отображении EAV и вызовет проблемы в дальнейшем.

Итак, я создаю новое приложение, используя shiro в качестве security/permission фреймворка, и мне нужно, чтобы пользователи могли редактировать себя, но не других пользователей, мне также нужно, чтобы другие пользователи могли редактировать кого угодно. Достаточно просто:

user1 = "user:441:edit"

user2 = "user:edit"

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

user3 = "user:459:edit","user:460:edit","user:461:edit"

Или кто-то, кто может редактировать пользователей, которые находятся в отделе, но только в этом отделе

user4 = "department:5898:user:edit"

Если кто-то из списка user3 удален, нет способа обновить разрешения этого пользователя без магии (просматривая все разрешения и находя те, которые нужно удалить).

Сейчас я не планирую сбрасывать ключи, но если бы это когда-нибудь произошло, и я НЕ очистил старые ключи, у меня могли бы быть пользователи, которые внезапно смогут редактировать пользователей, которые были недавно созданы после повторного использования старых ключей.

Я мог бы частично смягчить это, используя сгенерированный код ("user:ciS84nFSHK:edit") , который уникален для ВСЕХ ТАБЛИЦ, для управления удалением разрешений. Однако добавление нескольких сотен миллионов записей заставляет меня думать, что это может быстро стать громоздким.

Я неправильно использую Shiro? Я просто слишком сосредоточен на искажении ключей? Вы решили эти проблемы? Любая помощь была бы оценена.

Комментарии:

1. Я не поклонник такого подхода (и я не использую Shiro), но случай с призрачными поглощениями — как указывалось — происходит только при повторном использовании идентификатора. Так что не делайте этого. Простой, немного затратный, но довольно эффективный метод заключается в простом использовании GUID . 32 шестнадцатеричных символа, но «хорошо известный» тип и, как правило, «настолько уникальные, насколько это когда-либо понадобится большинству приложений» свойства.

Ответ №1:

Проведя еще несколько исследований с Shrio, я решил последовать предложению pst и просто ссылаться на значения через GUID (возможно, 10-значный буквенно-цифровой вместо этого, чтобы сохранить пространство).

Таким образом, user1 = «пользователь: 441: редактировать» станет «пользователь: 96aae854-fc40-42ff-b948-c8944c2fca92: редактировать» это поможет свести на нет беспокойство по поводу хранения ключей в виде строк.