Комментарии 4
Джек имеет права на дом, а значит и на темный чулан, а стало быть и на пшеницу, которая там хранится
Это утверждение истинно только в логике первого порядка (исчислении предикатов первого порядка). Я думаю, вот бы обрадовались банки и иже с ними, если бы это высказывание применялось на практике. А на практике надо разобраться, чья пшеница и на каком основании хранится в чулане.
Мой опыт показывает, что многоуровневое наследование прав это штука довольно редкая и, в реальных бизнес-задачах очень часто является выстрелом себе в ногу.
Поэтому только права к конкретному ресурсу, их и в токен можно запихать прекрасно, и проверять с линейной сложностью, ну и всё такое.
Опять-таки, из вашего примера: в соответствие с законодательством я могу иметь права на дом, но если я сдал в нём квартиру, то я не имею права в неё заходить.
Обычно в нормальных системах права "расширяются" вглубь.
Например, если человек имеет доступ к морде админки, то это совсем не обязательно, что он может редактировать контент, для этого ему нужно еще одно право.
В итоге, у него будет пачка прав из серии: 'admin_access', 'content_edit' и.т.п.
Эту пачку прав можно зашифровать в тот же токен и прекрасно проверять при доступе к ресурсу.
Чтобы не сходить с ума при создании нового пользователя, отвешивая ему прав каждый раз, можно создать роль, прикрутить к ней эту пачку прав и уже назначать пользователю роль.
Но тут возникает интересное - где должна храниться связка роль-права и что шифровать в токене? В принципе, можно при создании токена выгружать туда все права.
Ну и да, это всё RBAC.
Наследование прав доступа