209 похожих чатов

Кто использовал CASL в проекте, где есть Prisma ORM ?

9 ответов

18 просмотров

я)

https://github.com/htchtc052/music-app/tree/main/backend/src/casl

Ayrat- Автор вопроса
Alik Kotov
я)

о, крутяк я вот засел за попытку всунуть КАСЛ в свой проект с Призмой, и чёт запутался. - Ability (которая везде в примерах) - нынче deprecated.. - CASL for Prisma - похож на сырой костыль на первый взгляд...

Ayrat
о, крутяк я вот засел за попытку всунуть КАСЛ в св...

Надо же) и что вместо него) Может выпилить пока не поздно и заменить каким нибудь isOwner в сервисах. тем более оно в основном для этого и нужно

Ayrat
о, крутяк я вот засел за попытку всунуть КАСЛ в св...

вроде оно все работает. другое дело, что чуток избыточно и для юнит тестов неудобно

Ayrat- Автор вопроса
Alik Kotov
screenshot

Спасибо, посмотрел. Получается, основная логика "кому чего можно" находится в ability.factory и оттуда тянется в Гард (policies.guard), который навешивается на нужные роуты Трека? + вдогонку ещё декоратор @CheckPolicies (но я пока не понял, для чего он)

Ayrat
screenshot Спасибо, посмотрел. Получается, основная логика "к...

Да основное кому чему можно в factory а guard проверяет полиции которые назначеные в декораторе. Сейчас попробую подробнее пояснить @CheckPolicies(ReadTrackHandler) Назначило роуту одну полицию ReadTrack далее идем в @UseGuards(PoliciesGuard) там есть return policyHandlers.every((handler) => handler.handle(ability)); Оно предполагает, что полиций может быть много, хотя нафига нужно. но в доках так. Ну мало ли какие случаи Далее он берет этот единственный handler и передает туда обьект ability где и зашиты правила. и которая уже связана именно с текущим authUser который заходит на роут Далее смотрим что внутри хендлера constructor(private track: Track) {} handle(ability: AppAbility) { return ability.can(Action.Read, subject('Track', this.track)); } А там применяем ability от лица authUser к треку куда заходим. Ну будто бы выполняем isOwner на этом треке. А трек берется из DI куда его засовывает провайдер export const ReadTrackProvider: Provider = { provide: ReadTrackHandler, inject: [REQUEST], useFactory: (request: RequestWithTrackInterface) => { const track: Track = request.track; return new ReadTrackHandler(track); }, }; вот в этой строчке return new ReadTrackHandler(track); А сам трек идет из requestWithTrack куда его миддваре по id роута запихнуло async use(req: RequestWithTrack, res: Response, next: NextFunction) { const id = parseInt(req.params.id); /// const track: Track = await this.tracksService.findWithFileById(id); .// req.track = track; next(); }

Похожие вопросы

Обсуждают сегодня

@Benzenoid can you tell me the easiest, and safest way to bu.y HEX now?
Živa Žena
20
This is a question from my wife who make a fortune with memes 😂😂 About the Migration and Tokens: 1. How will the old tokens be migrated to the new $LGCYX network? What is th...
🍿 °anton°
2
What is the Dex situation? Agora team started with the Pnetwork for their dex which helped them both with integration. It’s completed but as you can see from the Pnetwork ann...
Ben
1
Anyone knows where there are some instructions or discort about failed bridge transactions ?
Jochem
21
@lozuk how do I get my phex copies of my ehex from a atomic wallet, to move to my rabby?
Justfrontin 👀
11
Hello, Is iExec also part of the "inception program" or another one ? Would it be a name to qualified the nature of the relationship between iExec and Nvidia? And does Secret ...
Ñïķøłäś
8
Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
any reference of this implementation?
BitBuddha
29
Also, why can’t the community have a vote/ say when it comes to initiatives like buybacks. Isn’t the point of crypto decentralisation? Don’t we deserve input as long term supp...
👨🏽‍🦰
13
Hi guys, any problem with Pulsebrige? Trying to transfer from wETH to ETH. First it tells me to connect my metamask "through mobile app" not desktop. Then I did and confirmed ...
Snowflakecrypto
13
Карта сайта