Как настроить auth guard, чтобы только администраторы могли использовать панель администратора (ngx-admin)? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть список пользователей в MySql, у каждого из них есть столбец роли, который является либо ADMIN, либо USER. Я настроил функцию auth guard, чтобы позволить только зарегистрированному пользователю использовать ngx-admin, но я хочу сделать шаг вперед и разрешить только администратору войти. Как я могу это сделать?

1 Ответ

0 голосов
/ 02 мая 2019

на авторизации. Вы должны отправить неавторизованный ответ API, если роль не является администратором.

Тогда вам нужен перехватчик, который выйдет из системы при получении неавторизованного ответа. или, возможно, вернуть его на новую неавторизованную страницу. что бы ни было предпочтительным.

Я не знаю весны. Но в угловых вы можете изменить перехватчик, как это.

@Injectable()
export class HttpConfigInterceptor implements HttpInterceptor {
    constructor(private authenticationService: AuthenticationService) { }
    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

        request = request.clone({ url: `${request.url}` });

        // Sample how authorization headers are being assigned
        let currentUser = this.authService.currentUserValue;

        if (currentUser && currentUser.Token) {
            request = request.clone({
                setHeaders: {
                    Authorization: `Bearer ${currentUser.Token}`
                }
            });
        }
        ////

        return next.handle(request).pipe(
            map((event: HttpEvent<any>) => {
                if (event instanceof HttpResponse) {
                }
                return event;
            }),
            catchError((error: HttpErrorResponse) => {
             //Here you can catch errors in the request.

                if (error.status === 401) { <- 401 is UnAuthorized . if Status is 401
                    // auto logout if 401 response returned from api - Unauthorized
                    this.authService.logout();
                    location.reload(true);
                   //Redirecting is left to the AuthGuard. it will auto redirect on reload
                }
               //this is if any other error occurs.
                let data = {};
                data = {
                    reason: error && error.error.reason ? error.error.reason : '',
                    status: error.status
                };
                return throwError(error);
            }));
    }
}
...