на отдельные методы?
Щас получается что проверки на роль не происходит. Есть задекорирую метод класса - будет проверять.
@ApiTags('Автомобили')
@UseGuards(JwtAuthGuard, RolesGuard)
@Controller('cars')
@Roles(UserRole.Customer)
export class CarController {
@Get('allCarsOfUser')
getAllCarsOfUser(): string {
return 'getAllCarsOfUser';
}
}
const roles = this.reflector.getAll<string[]>( 'roles', [context.getHandler(), context.getClass()] )
Щас приходят роли в декоратор в таком виде [ undefined, [ 'Admin' ] ]. Я так понимаю нужно в плоский массив привести и ходить по нему как раньше? roles.some((role) => role === candidate.role)
Я чуть забыл, ты должен вызывать getAllAndOverride
Спасибо. Это работает для меня)
А если я хочу весь контроллер предоставить в свободное пользование "админу", а его некоторое методы только пользователям. Это как то иначе реализуется? Щас у меня приходит только то что из хендлера то есть @Roles(UserRole.Customer)
Ну почему, если на методе нет декоратора, то он будет брать роли, которые на контроллере, а если укажешь на методе - роль перезапишется на ту, которая на методе
Ну вот да, на методе есть роль кастомера, а на контролеере роль - админа. Я будучи админом дергаю метод(с ролью кастомера) и меня нахрен шлют) потому что роль перетерлась) А вот мерж помогает в этой ситуации
Я, кстати, чтобы не было кода такого вида @Role(Role.ADMIN, Role.USER), сами роли сделал числами export enum Role { USER, ADMIN } В гарде просто проверяю сравнением return user.role >= role;
Пока не вижу проблем с репрезентацией этих чисел в человеко-понятные названия, как по мне такой подход проще
Обсуждают сегодня