Как правило, пользователи не связаны напрямую с привилегиями / разрешениями. В типичных сценариях пользователи связаны с ролями, а роли связаны с разрешениями.
Отношение пользователя к роли не кэшировано , а отношение роли-разрешения кэшировано . Это очень полезно, поскольку могут быть тысячи пользователей, и кэширование всех данных о разрешениях пользователя может привести к снижению производительности, но, вероятно, их будет 15-20, может быть, 100 ролей.
Почему кэширование отношений между пользовательскими привилегиями ухудшает производительность?
Довольно просто, кэширование повышает производительность только тех данных, к которым часто обращаются. Если существуют тысячи или сотни тысяч пользователей, кэширование всех этих данных об отношениях между пользователями и правами будет на самом деле хуже, чем выборка из базы данных, поскольку к ней часто обращаются.
С другой стороны, кэширование данных разрешений ролей может повысить производительность из-за высокой частоты доступа (каждый вошедший в систему пользователь получит доступ к кешу для этих данных в отличие от кэширования привилегированных пользователей).
Надеюсь, это имеет смысл.
Вы можете проверить реализацию кэширования библиотеки разрешений Spatie Laravel , которая в значительной степени находится в тех же строках. В настоящее время это самая популярная библиотека Laravel для ролей и разрешений.
Смотри также: https://stackoverflow.com/a/42842077/7377984