Shiro + ключи хранятся в виде строк = точка отказа или ненужная проблема? - PullRequest
1 голос
/ 19 мая 2011

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

Я всегда придерживался идеи, что никогда не стоит хранить первичные ключи в местах, где нет ограничений. Например, сохранение первичного ключа в архитектуре стиля 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 Ответ

0 голосов
/ 24 мая 2011

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

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

...