Комментарии 6
А не думали решить проблему с разрастающимся размером JWT токена через битовую маску? Например
доступ к X - это 1
доступ к Y - это 2
доступ к Z - это 4
доступ к XY - это 1 + 2 = 3
доступ к XYZ - это 1 + 2 + 4 = 7
с помощь битовой маски можно легко будет достать все права доступа. Хранить это можно в виде той же строки "0000010000", тогда при ограничении заголовка в 4кб вы сможете записать права на 512 систем, если нужно больше, то можно хранить в виде целых чисел, тогда вы сможете записать права на 262 144 систем (unsigned big int может поместить в себя 64 системы и занимает 1 байт -> 4096 * 64 = 262 144)
P.S. вспомнил отличный пример реализации у VK: https://dev.vk.com/reference/access-rights
Ключевое, что битовую маску нельзя писать строкой как есть, иначе не будет никакой экономии, надо использовать Base64 сериализацию. Тратить байт на один бит это дорого, а в строковом представлении на каждый 1 или 0 будет уходить байт (кодировка заголовков ANSI).
Поддерживаю. Тоже как-то использовал такой подход. Получается очень компактно не только при передачи по сети, но и при хранении в бд. И работать с таким форматом удобно
GT свою очередь помещался в Header запроса.
"в" потеряно
Поэтому удалось найти компромисс с ментейнерами библиотеки graphql-dotnet и добавить глобальный флаг-переключатель «экспериментального» функционала.
На самом деле не такой уж он глобальный, а как раз весьма локальный, потому что включает/отключает эту фичу на конкретной схеме (тип Schema). Приложение может хостить сразу несколько схем, выставляя их наружу по разным урлам вроде ~/cats/graphql , ~/dogs/graphql . И вот по сути для каждой такой связки url+schema можно настраивать поведение. Короче говоря, флаг этот не статический, а экземплярный и живёт в каждой схеме.
Настоятельно рекомендую присмотреться
рекомендуем
Когда контекст доступа важен: авторизация в микросервисной платформе на GraphQL