Size: a a a

NestJS — русскоязычное сообщество

2020 April 07

И

Илья | 😶 in NestJS — русскоязычное сообщество
Remite
на каждый запрос тянуть всю инфу про юзера в том числе какими группами он владеет? ну мне кажется избыточно
базовая инфа норм, остальное как-то лишнее
источник

YS

Yaroslav Shelomentsev in NestJS — русскоязычное сообщество
Yaroslav Shelomentsev
хз, не буду давать дурные советы) лучше послушаю.
решил погуглить - в основном юзают сервисы внутри гварда, предполагаю что можно отнаследовать сервисы сущностей от типового сервиса, содержащего образный can соответствующий вашей бизнес-логике, возвращающий bool. тем самым в гварде и в контроллере будут одинаковые импорты, ну и в целом вроде как это в допусках
источник

И

Илья | 😶 in NestJS — русскоязычное сообщество
+ если кешировать, то заебумба
источник

R

Remite in NestJS — русскоязычное сообщество
Илья | 😶
базовая инфа норм, остальное как-то лишнее
и как тогда в таком кейсе поступить?

Господа подскажите пожалуйста в точки зрения философии.
Есть сущность. например группа.
Есть владелец этой группы тот кто её создал.
Есть ендпоинт "удалить группу"
Соответственно удалить группу может только её владелец.
Внимание вопрос:
Где должна происходить проверка доступности этого ендпоинта?

В Гварде?
В контроллере?
В сервисе?

Против сервиса у меня аргумент что если понадобится удалить группу без участия пользователя, например группу покинул последний участник, то будет затыка с прохождением доступа.
Против гварда мне кажется абсолютно не правильно в гварде делать запрос в базу для проверки доступности, похоже на размазывание логики.

Кто что посоветует?
источник

И

Илья | 😶 in NestJS — русскоязычное сообщество
епаресете
источник

И

Илья | 😶 in NestJS — русскоязычное сообщество
я бы в гварде проверял или в сервисе
источник

YS

Yaroslav Shelomentsev in NestJS — русскоязычное сообщество
Remite
и как тогда в таком кейсе поступить?

Господа подскажите пожалуйста в точки зрения философии.
Есть сущность. например группа.
Есть владелец этой группы тот кто её создал.
Есть ендпоинт "удалить группу"
Соответственно удалить группу может только её владелец.
Внимание вопрос:
Где должна происходить проверка доступности этого ендпоинта?

В Гварде?
В контроллере?
В сервисе?

Против сервиса у меня аргумент что если понадобится удалить группу без участия пользователя, например группу покинул последний участник, то будет затыка с прохождением доступа.
Против гварда мне кажется абсолютно не правильно в гварде делать запрос в базу для проверки доступности, похоже на размазывание логики.

Кто что посоветует?
в middleware фетчите юзера, в гварде validate, на вход groupId
источник

И

Илья | 😶 in NestJS — русскоязычное сообщество
но так как в сервисе вся инфа будет, то значит в сервисе
источник

И

Илья | 😶 in NestJS — русскоязычное сообщество
а в гварде тебе придётся запрос к базе слать, что как-то не оч
источник

YS

Yaroslav Shelomentsev in NestJS — русскоязычное сообщество
Илья | 😶
а в гварде тебе придётся запрос к базе слать, что как-то не оч
а если в гварде сервис, а внутри сервиса запрос?)
источник

И

Илья | 😶 in NestJS — русскоязычное сообщество
Yaroslav Shelomentsev
а если в гварде сервис, а внутри сервиса запрос?)
зачем тебе тогда гвард ?
источник

YS

Yaroslav Shelomentsev in NestJS — русскоязычное сообщество
чтобы return bool и без бд
источник

YS

Yaroslav Shelomentsev in NestJS — русскоязычное сообщество
а сервис как подцепить примесью?
источник

LK

L K in NestJS — русскоязычное сообщество
Yaroslav Shelomentsev
решил погуглить - в основном юзают сервисы внутри гварда, предполагаю что можно отнаследовать сервисы сущностей от типового сервиса, содержащего образный can соответствующий вашей бизнес-логике, возвращающий bool. тем самым в гварде и в контроллере будут одинаковые импорты, ну и в целом вроде как это в допусках
вот наследование не нужно )
источник

R

Remite in NestJS — русскоязычное сообщество
Yaroslav Shelomentsev
в middleware фетчите юзера, в гварде validate, на вход groupId
енивей что в мидлваре вытягивать кучу доп инфы, что просто сходить отдельным запросом
источник

YS

Yaroslav Shelomentsev in NestJS — русскоязычное сообщество
Remite
енивей что в мидлваре вытягивать кучу доп инфы, что просто сходить отдельным запросом
почему кучу то - не пойму. вы тянете role, access и прочие базовые штуки (если есть), если нет - то все в сервисе
источник

R

Remite in NestJS — русскоязычное сообщество
Yaroslav Shelomentsev
почему кучу то - не пойму. вы тянете role, access и прочие базовые штуки (если есть), если нет - то все в сервисе
какими сущностями владеет пользователь не относится к его конфигурации пермишенов
источник

R

Remite in NestJS — русскоязычное сообщество
грубо говоря
в системе каждый создает под себя какие-то сущности
и только тот кто их создал может их удалять
если у меня миллион созданных сущностей, нет необходимости подгребать их айдишники, что бы проверить в каком-то кейсе является ли юзер их овнером
источник

YS

Yaroslav Shelomentsev in NestJS — русскоязычное сообщество
вы все равно не знаете о том может он это делать или нет без запроса самой сущности, на сколько я понял.
не знаю на сколько это по-nestовски, но: если речь об условном ownerId в groups, то вам все равно делать select-предзапрос на проверку (для унификации прав доступа), и nest здесь не сильно важен, поэтому в сервисе групп юзеров у вас должен быть async can(action: string, id: string), возвращающий boolean. вы этот can можете дернуть из гварда, или любого другого места
источник

YS

Yaroslav Shelomentsev in NestJS — русскоязычное сообщество
гварды удобны декораторами, ну и они гварды не просто так - опять же, на сколько я понимаю - они и созданы для того чтобы атомарно чекать такие штуки.
источник