feat: add missing abilities (#354)

feat: add all missing abilities rules on resolvers
This commit is contained in:
Jérémy M
2023-06-22 20:09:17 +02:00
committed by GitHub
parent 4a2797c491
commit c4ad0171b0
21 changed files with 461 additions and 104 deletions

View File

@ -1,6 +1,7 @@
import { Test, TestingModule } from '@nestjs/testing';
import { UserResolver } from './user.resolver';
import { UserService } from './user.service';
import { AbilityFactory } from 'src/ability/ability.factory';
describe('UserResolver', () => {
let resolver: UserResolver;
@ -13,6 +14,10 @@ describe('UserResolver', () => {
provide: UserService,
useValue: {},
},
{
provide: AbilityFactory,
useValue: {},
},
],
}).compile();

View File

@ -11,6 +11,12 @@ import {
PrismaSelect,
PrismaSelector,
} from 'src/decorators/prisma-select.decorator';
import { AbilityGuard } from 'src/guards/ability.guard';
import { CheckAbilities } from 'src/decorators/check-abilities.decorator';
import { ReadUserAbilityHandler } from 'src/ability/handlers/user.ability-handler';
import { UserAbility } from 'src/decorators/user-ability.decorator';
import { AppAbility } from 'src/ability/ability.factory';
import { accessibleBy } from '@casl/prisma';
@UseGuards(JwtAuthGuard)
@Resolver(() => User)
@ -21,9 +27,12 @@ export class UserResolver {
@Query(() => [User], {
nullable: false,
})
@UseGuards(AbilityGuard)
@CheckAbilities(ReadUserAbilityHandler)
async findManyUser(
@Args() args: FindManyUserArgs,
@AuthWorkspace() workspace: Workspace,
@UserAbility() ability: AppAbility,
@PrismaSelector({ modelName: 'User' })
prismaSelect: PrismaSelect<'User'>,
): Promise<Partial<User>[]> {
@ -31,9 +40,7 @@ export class UserResolver {
...args,
where: {
...args.where,
workspaceMember: {
is: { workspace: { is: { id: { equals: workspace.id } } } },
},
AND: [accessibleBy(ability).User],
},
select: prismaSelect.value,
});