Affichage des erreurs envoyés par l'api et ajout d'une enum role
This commit is contained in:
parent
2921ecc303
commit
192db6d370
@ -51,7 +51,7 @@ export class CommentFormComponent {
|
|||||||
this.successMessage("Succès", "Commentaire créé avec succès");
|
this.successMessage("Succès", "Commentaire créé avec succès");
|
||||||
},
|
},
|
||||||
error: (error) => {
|
error: (error) => {
|
||||||
this.failureMessage("Erreur d'envois", error.message);
|
this.failureMessage("Erreur d'envois", error.error.message);
|
||||||
}
|
}
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ import {MenubarModule} from 'primeng/menubar';
|
|||||||
import {ToastModule} from 'primeng/toast';
|
import {ToastModule} from 'primeng/toast';
|
||||||
import {Author} from '../../models/author';
|
import {Author} from '../../models/author';
|
||||||
import {AuthService} from '../../auth.service';
|
import {AuthService} from '../../auth.service';
|
||||||
|
import {Role} from '../../models/role'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-header',
|
selector: 'app-header',
|
||||||
@ -44,19 +45,19 @@ export class HeaderComponent {
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
if (author.role === 'WRITER') {
|
if (author.role === Role.WRITER) {
|
||||||
return [
|
return [
|
||||||
...commonItems,
|
...commonItems,
|
||||||
this.getWriterMenu(),
|
this.getWriterMenu(),
|
||||||
this.getUserMenu(author)
|
this.getUserMenu(author)
|
||||||
];
|
];
|
||||||
} else if (author.role === 'ADMIN') {
|
} else if (author.role === Role.ADMIN) {
|
||||||
return [
|
return [
|
||||||
...commonItems,
|
...commonItems,
|
||||||
this.getAdminMenu(),
|
this.getAdminMenu(),
|
||||||
this.getUserMenu(author)
|
this.getUserMenu(author)
|
||||||
];
|
];
|
||||||
} else if (author.role === 'READER') {
|
} else if (author.role === Role.READER) {
|
||||||
return [
|
return [
|
||||||
...commonItems,
|
...commonItems,
|
||||||
this.getUserMenu(author)
|
this.getUserMenu(author)
|
||||||
|
@ -79,7 +79,7 @@ export class PostFormComponent implements OnDestroy {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
error: (err) => {
|
error: (err) => {
|
||||||
this.failureMessage('Erreur', `Impossible de charger le post : ${err.message}`);
|
this.failureMessage('Erreur', err.error.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
@ -113,7 +113,7 @@ export class PostFormComponent implements OnDestroy {
|
|||||||
next: (_) => {
|
next: (_) => {
|
||||||
this.successMessage('Succès', 'Post mis à jour avec succès')
|
this.successMessage('Succès', 'Post mis à jour avec succès')
|
||||||
},
|
},
|
||||||
error: (err) => this.failureMessage('Erreur', err.message)
|
error: (err) => this.failureMessage('Erreur', err.error.message)
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
@ -132,7 +132,7 @@ export class PostFormComponent implements OnDestroy {
|
|||||||
this.successMessage('Succès', 'Post créé avec succès')
|
this.successMessage('Succès', 'Post créé avec succès')
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
error: (err) => this.failureMessage('Erreur', err.message)
|
error: (err) => this.failureMessage('Erreur', err.error.message)
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import {Router} from '@angular/router';
|
|||||||
import {MessageService} from 'primeng/api';
|
import {MessageService} from 'primeng/api';
|
||||||
import {Author} from '../../models/author';
|
import {Author} from '../../models/author';
|
||||||
import {AuthService} from '../../auth.service';
|
import {AuthService} from '../../auth.service';
|
||||||
|
import {Role} from '../../models/role';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-register-form',
|
selector: 'app-register-form',
|
||||||
@ -28,11 +29,11 @@ export class RegisterFormComponent implements OnDestroy {
|
|||||||
@Output() createdAuthor: EventEmitter<Author> = new EventEmitter();
|
@Output() createdAuthor: EventEmitter<Author> = new EventEmitter();
|
||||||
@Input() password: string = "";
|
@Input() password: string = "";
|
||||||
@Input() passwordConfirm: string = "";
|
@Input() passwordConfirm: string = "";
|
||||||
@Input() role: string = "READER"
|
@Input() role: string = Role.READER
|
||||||
@Input() adminForm: boolean = false;
|
@Input() adminForm: boolean = false;
|
||||||
roles = [
|
roles = [
|
||||||
{name: 'Lecteur', value: 'READER'},
|
{name: 'Lecteur', value: Role.READER},
|
||||||
{name: 'Écrivain', value: 'WRITER'}
|
{name: 'Écrivain', value: Role.WRITER}
|
||||||
];
|
];
|
||||||
subs: Subscription[] = [];
|
subs: Subscription[] = [];
|
||||||
form: FormGroup;
|
form: FormGroup;
|
||||||
@ -51,7 +52,7 @@ export class RegisterFormComponent implements OnDestroy {
|
|||||||
username: ['', [Validators.required, Validators.maxLength(255)]],
|
username: ['', [Validators.required, Validators.maxLength(255)]],
|
||||||
password: ['', [Validators.required, Validators.maxLength(50)]],
|
password: ['', [Validators.required, Validators.maxLength(50)]],
|
||||||
passwordConfirm: ['', [Validators.required, Validators.maxLength(50)]],
|
passwordConfirm: ['', [Validators.required, Validators.maxLength(50)]],
|
||||||
role: [{value: 'READER'}, [Validators.required, Validators.maxLength(10)]],
|
role: [{value: Role.READER}, [Validators.required, Validators.maxLength(10)]],
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,13 +89,13 @@ export class RegisterFormComponent implements OnDestroy {
|
|||||||
this.createdAuthor.emit(author);
|
this.createdAuthor.emit(author);
|
||||||
},
|
},
|
||||||
error: (err) => {
|
error: (err) => {
|
||||||
this.failureMessage("Erreur", err.message);
|
this.failureMessage("Erreur", err.error.message);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.subs.push(this.authorService.createAccount(this.username, this.password).subscribe({
|
this.subs.push(this.authorService.createAccount(this.username, this.password).subscribe({
|
||||||
next: () => this.router.navigate(['/login']).then(() => this.successMessage('Succès', 'Utilisateur créé avec succès')),
|
next: () => this.router.navigate(['/login']).then(() => this.successMessage('Succès', 'Utilisateur créé avec succès')),
|
||||||
error: (err) => this.failureMessage('Erreur', err.message)
|
error: (err) => this.failureMessage('Erreur', err.error.message)
|
||||||
|
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ export class UpdateProfileFormComponent implements OnDestroy {
|
|||||||
this.router.navigate(['/']);
|
this.router.navigate(['/']);
|
||||||
},
|
},
|
||||||
error: (err) => {
|
error: (err) => {
|
||||||
this.failureMessage("Erreur", err.message);
|
this.failureMessage("Erreur", err.error.error.message);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
} else {
|
} else {
|
||||||
@ -108,7 +108,7 @@ export class UpdateProfileFormComponent implements OnDestroy {
|
|||||||
this.router.navigate(['/']);
|
this.router.navigate(['/']);
|
||||||
},
|
},
|
||||||
error: (err) => {
|
error: (err) => {
|
||||||
this.failureMessage("Erreur", err.message);
|
this.failureMessage("Erreur", err.error.error.message);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
import {CanActivateFn, Router} from '@angular/router';
|
import {CanActivateFn, Router} from '@angular/router';
|
||||||
import {inject} from '@angular/core';
|
import {inject} from '@angular/core';
|
||||||
import {CookieService} from 'ngx-cookie-service';
|
import {CookieService} from 'ngx-cookie-service';
|
||||||
import {Author} from '../models/author';
|
|
||||||
import {AuthService} from '../auth.service';
|
import {AuthService} from '../auth.service';
|
||||||
|
import {Role} from '../models/role';
|
||||||
|
|
||||||
export const adminGuard: CanActivateFn = (route, state) => {
|
export const adminGuard: CanActivateFn = (route, state) => {
|
||||||
const router = inject(Router);
|
const router = inject(Router);
|
||||||
const cookieService = inject(CookieService);
|
const cookieService = inject(CookieService);
|
||||||
const authService: AuthService = inject(AuthService);
|
const authService: AuthService = inject(AuthService);
|
||||||
|
|
||||||
if ((authService.isAuthenticated() && JSON.parse(cookieService.get("author")).role !== 'ADMIN') || !authService.isAuthenticated()) {
|
if ((authService.isAuthenticated() && JSON.parse(cookieService.get("author")).role !== Role.ADMIN) || !authService.isAuthenticated()) {
|
||||||
router.navigate(['/']);
|
router.navigate(['/']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,13 +2,14 @@ import {CanActivateFn, Router} from '@angular/router';
|
|||||||
import {inject} from '@angular/core';
|
import {inject} from '@angular/core';
|
||||||
import {CookieService} from 'ngx-cookie-service';
|
import {CookieService} from 'ngx-cookie-service';
|
||||||
import {AuthService} from '../auth.service';
|
import {AuthService} from '../auth.service';
|
||||||
|
import {Role} from '../models/role';
|
||||||
|
|
||||||
export const writerGuard: CanActivateFn = (route, state) => {
|
export const writerGuard: CanActivateFn = (route, state) => {
|
||||||
const router = inject(Router);
|
const router = inject(Router);
|
||||||
const cookieService = inject(CookieService);
|
const cookieService = inject(CookieService);
|
||||||
const authService = inject(AuthService);
|
const authService = inject(AuthService);
|
||||||
|
|
||||||
if ((authService.isAuthenticated() && JSON.parse(cookieService.get("author")).role !== 'WRITER') || !authService.isAuthenticated()) {
|
if ((authService.isAuthenticated() && JSON.parse(cookieService.get("author")).role !== Role.WRITER) || !authService.isAuthenticated()) {
|
||||||
router.navigate(['/']);
|
router.navigate(['/']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
5
src/app/models/role.ts
Normal file
5
src/app/models/role.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export enum Role {
|
||||||
|
WRITER = "WRITER",
|
||||||
|
READER = "READER",
|
||||||
|
ADMIN = "ADMIN",
|
||||||
|
}
|
@ -39,8 +39,8 @@ export class AdminAuthorsComponent implements OnDestroy{
|
|||||||
next: (authors: Author[]) => {
|
next: (authors: Author[]) => {
|
||||||
this.authors = authors;
|
this.authors = authors;
|
||||||
},
|
},
|
||||||
error: (error: Error) => {
|
error: (error) => {
|
||||||
this.failureMessage("Erreur", error.message)
|
this.failureMessage("Erreur", error.error.message)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,7 @@ export class HomeComponent implements OnDestroy {
|
|||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
}),
|
}),
|
||||||
error: (err) => console.error(err.message),
|
error: (err) => console.error(err.error.error.message),
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ export class LoginComponent implements OnDestroy {
|
|||||||
this.successMessage('Connecté avec succès', 'Heureux de vous revoir ' + this.actualAuthor?.name)
|
this.successMessage('Connecté avec succès', 'Heureux de vous revoir ' + this.actualAuthor?.name)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
error: (err) => this.failureMessage('Erreur de connexion', err.message)
|
error: (err) => this.failureMessage('Erreur de connexion', err.error.message)
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
@ -62,7 +62,7 @@ export class MyPostsComponent implements OnDestroy {
|
|||||||
if (!(this.authService.isSessionExpired()) && this.authService.isAuthenticated()) {
|
if (!(this.authService.isSessionExpired()) && this.authService.isAuthenticated()) {
|
||||||
this.authorService.getAuthorsPosts(this.actualAuthor?.id, this.authService.getAuthenticatedAuthorToken()).subscribe({
|
this.authorService.getAuthorsPosts(this.actualAuthor?.id, this.authService.getAuthenticatedAuthorToken()).subscribe({
|
||||||
next: posts => this.posts = posts,
|
next: posts => this.posts = posts,
|
||||||
error: error => this.failureMessage("Erreur", error.message),
|
error: error => this.failureMessage("Erreur", error.error.message),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
@ -76,7 +76,7 @@ export class MyPostsComponent implements OnDestroy {
|
|||||||
this.updatePosts()
|
this.updatePosts()
|
||||||
this.successMessage("Post supprimé", "Ce post a été supprimé avec succès")
|
this.successMessage("Post supprimé", "Ce post a été supprimé avec succès")
|
||||||
},
|
},
|
||||||
error: error => this.failureMessage("Erreur", error.message),
|
error: error => this.failureMessage("Erreur", error.error.message),
|
||||||
});
|
});
|
||||||
this.closeDialog(this.deleteDialogVisibility, rowIndex)
|
this.closeDialog(this.deleteDialogVisibility, rowIndex)
|
||||||
}
|
}
|
||||||
|
@ -88,7 +88,7 @@ export class NewPostComponent implements OnDestroy {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
error: (err) => {
|
error: (err) => {
|
||||||
this.failureMessage('Erreur', err.message);
|
this.failureMessage('Erreur', err.error.message);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
<p> Envoyé le {{ comment.commentDate | date: "dd/MM/yyyy à HH:mm" }}</p>
|
<p> Envoyé le {{ comment.commentDate | date: "dd/MM/yyyy à HH:mm" }}</p>
|
||||||
}
|
}
|
||||||
@if (actualAuthor) {
|
@if (actualAuthor) {
|
||||||
@if (comment.authorId === actualAuthor.id || actualAuthor.role === 'ADMIN') {
|
@if (comment.authorId === actualAuthor.id || actualAuthor.role === Role.ADMIN) {
|
||||||
<p-button severity="danger" icon="pi pi-trash" (onClick)="setCommentDialogVisible(comment.id)"></p-button>
|
<p-button severity="danger" icon="pi pi-trash" (onClick)="setCommentDialogVisible(comment.id)"></p-button>
|
||||||
<p-dialog [closable]="false" [modal]="true" header='Supprimer le commentaire ?' [visible]="commentDeleteDialogMap.get(comment.id) ?? false">
|
<p-dialog [closable]="false" [modal]="true" header='Supprimer le commentaire ?' [visible]="commentDeleteDialogMap.get(comment.id) ?? false">
|
||||||
<div class="delete-dialog">
|
<div class="delete-dialog">
|
||||||
@ -50,7 +50,7 @@
|
|||||||
<p> Envoyé le {{ comment.commentDate | date: "dd/MM/yyyy à HH:mm" }}</p>
|
<p> Envoyé le {{ comment.commentDate | date: "dd/MM/yyyy à HH:mm" }}</p>
|
||||||
}
|
}
|
||||||
@if (actualAuthor) {
|
@if (actualAuthor) {
|
||||||
@if (comment.authorId === actualAuthor.id || actualAuthor.role === 'ADMIN') {
|
@if (comment.authorId === actualAuthor.id || actualAuthor.role === Role.ADMIN) {
|
||||||
<p-button severity="danger" icon="pi pi-trash" (onClick)="setCommentDialogVisible(comment.id)"></p-button>
|
<p-button severity="danger" icon="pi pi-trash" (onClick)="setCommentDialogVisible(comment.id)"></p-button>
|
||||||
<p-dialog [closable]="false" [modal]="true" header='Supprimer le commentaire ?' [visible]="commentDeleteDialogMap.get(comment.id) ?? false">
|
<p-dialog [closable]="false" [modal]="true" header='Supprimer le commentaire ?' [visible]="commentDeleteDialogMap.get(comment.id) ?? false">
|
||||||
<div class="delete-dialog">
|
<div class="delete-dialog">
|
||||||
|
@ -16,6 +16,7 @@ import {CommentFormComponent} from '../../components/comment-form/comment-form.c
|
|||||||
import {Button} from 'primeng/button';
|
import {Button} from 'primeng/button';
|
||||||
import {DialogModule} from 'primeng/dialog';
|
import {DialogModule} from 'primeng/dialog';
|
||||||
import {AuthService} from '../../auth.service';
|
import {AuthService} from '../../auth.service';
|
||||||
|
import {Role} from '../../models/role';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-post',
|
selector: 'app-post',
|
||||||
@ -73,7 +74,7 @@ export class PostComponent {
|
|||||||
});
|
});
|
||||||
this.comments.forEach(comment => this.commentDeleteDialogMap.set(comment.id, false));
|
this.comments.forEach(comment => this.commentDeleteDialogMap.set(comment.id, false));
|
||||||
},
|
},
|
||||||
error: err => this.failureMessage("Erreur", err.message)
|
error: err => this.failureMessage("Erreur", err.error.message)
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
if (this.concernedPost?.body) {
|
if (this.concernedPost?.body) {
|
||||||
@ -106,7 +107,7 @@ export class PostComponent {
|
|||||||
this.setCommentDialogHidden(comment.id);
|
this.setCommentDialogHidden(comment.id);
|
||||||
this.commentDeleteDialogMap.delete(comment.id);
|
this.commentDeleteDialogMap.delete(comment.id);
|
||||||
},
|
},
|
||||||
error: err => this.failureMessage("Erreur", err.message)
|
error: err => this.failureMessage("Erreur", err.error.message)
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -142,4 +143,6 @@ export class PostComponent {
|
|||||||
closable: false
|
closable: false
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected readonly Role = Role;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user