Выберите только записи, где домен на основе пользователя "разрешение" - PullRequest
0 голосов
/ 09 ноября 2019

Привет всем, я хотел бы получить несколько советов о том, как решить мою проблему.

У меня есть таблица, в которой хранятся данные пользователя, такие как:

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)
      );
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...