Orcioly Andrade Alves
04/10/2022, 10:52 PMimport { User, Post, Prisma } from '@prisma/client';
import { AbilityClass, AbilityBuilder, subject } from '@casl/ability';
import { PrismaAbility, Subjects } from '@casl/prisma';
type AppAbility = PrismaAbility<[string, Subjects<{
User: User,
Post: Post
}>]>;
const AppAbility = PrismaAbility as AbilityClass<AppAbility>;
const { can, cannot, build } = new AbilityBuilder(AppAbility);
can('read', 'Post', { authorId: 1 });
cannot('read', 'Post', { title: { startsWith: '[WIP]:' } });
const ability = build();
ability.can('read', 'Post');
ability.can('read', subject('Post', { title: '...', authorId: 1 })));
Nurul
04/11/2022, 11:06 AM@casl/prisma
library, but from the documentation, I can say that you would need to put the abilities
in the where clause as described in the documentation here.
Another alternative to implement ACL is using cerbos.dev
They have integration with prisma as mentioned in their docsOrcioly Andrade Alves
04/11/2022, 11:30 AM