Привет всем, я хотел бы получить несколько советов о том, как решить мою проблему.
У меня есть таблица, в которой хранятся данные пользователя, такие как:
ID, FIRST_NAME, LAST_NAMEEMAIL, PASSWORD, ROLE, DOMAIN
также получил таблицу с псевдонимами, где я получил
ID, DOMAIN_ID, DOMAIN, DESTINATION
InРоль таблицы пользователя означает администратор, модератор, пользователь и т. д., а домен, например, aaa.pl, bbb.pl. Также таблица псевдонимов получила домен, такой как aaa.pl, bbb.pl
Я хочу выбрать из таблицы только псевдонимы, в которых домен совпадает с назначенным пользователю. Таким образом, пользователь X может видеть только псевдонимы. Где находится тот же домен.
backend
Это мой контроллер
public async aliasesListByDomain(req: Request, res: Response): Promise<void> {
const { domain } = req.params;
const aliasesListByDomain = await pool.query('SELECT * FROM virtual_aliases WHERE domain= ?', [domain]);
if (aliasesListByDomain.length > 0) {
res.json(aliasesListByDomain);
} else {
res.status(404).json({ message: "Alias doesn't exists" });
}
}
Вот как я аутентифицирую пользователя
router.post('/authenticate', (req, res) => {
User.findOne({
where: {
email: req.body.email,
password: req.body.password
}
})
.then(user => {
if (user) {
let token = jwt.sign(user.dataValues, process.env.SECRET_KEY, {
expiresIn: 1440
})
res.json({ token: token })
} else {
res.send('User does not exist')
}
})
.catch(err => {
res.send('error: ' + err)
})
})
А теперь у меня проблема с моим внешним интерфейсом.
Это мой Сервис, где я получаю все псевдонимы (независимо от домена)
getAliases(): Observable<Alias> {
return this.http.get(`${this.API_URI}/aliases`);
}
, и есть мой компонент, где яполучить все псевдонимы
getAliases() {
this.aliasesService.getAliases().subscribe(
res => {
this.alias = res;
console.log(this.alias);
},
err => console.error(err)
);
}
Теперь, как я могу выбрать только псевдонимы на основе разрешения пользователя.
Я пробовал что-то вроде этого:
Служба
getAliasesByDomain(domain: string): Observable<Alias> {
return this.http.get(`${this.API_URI}/aliases/${domain}`);
}
Это моя служба авторизации
для входа в систему
public login(user: TokenPayload): Observable<any> {
const base = this.http.post(`http://localhost:3000/users/authenticate`, user);
const request = base.pipe(
map((data: TokenResponse) => {
console.log(data);
if (data.token) {
this.saveToken(data.token);
}
return data;
})
)
return request;
}
и UserDetails
public getUserDetails(): UserDetails {
const token = this.getToken();
let payload;
if (token) {
payload = token.split('.')[1];
payload = window.atob(payload);
return JSON.parse(payload);
} else {
return null;
}
}
Должен ли я в своем компоненте получить usertoken затем JSON.parse()
это и получить данные домена от зарегистрированного пользователя? Затем отправьте его в api?
Какое решение лучше для этого?
-Edit Я сделал что-то вроде этого:
private getToken(): string {
if (!this.token) {
this.token = localStorage.getItem('usertoken');
}
return this.token;
}
getAliasesByDomain(){
const token = this.getToken();
let user;
if (token) {
user = token.split('.')[1];
user = window.atob(user);
user = JSON.parse(user);
console.log('user z from getAliasesByDomain: '+user.domain);
this.aliasesService.getAliasesByDomain(user.domain).subscribe(
res => {
console.log(res);
this.alias = res;
},
err => console.error(err)
);
}
}