仅根据用户“权限”选择域所在的记录

时间:2019-11-09 09:16:53

标签: javascript angular express sequelize.js

大家好,我想了解一些解决问题的技巧。

我有一张存储用户详细信息的表,

  

ID,FIRST_NAME,LAST_NAME电子邮件,密码,角色,域

我也找到了名为Aliases的表

  

ID,DOMAIN_ID,DOMAIN,DESTINATION

在用户表中,角色表示管理员,主持人,用户等。例如,域是aaa.pl,bbb.pl。另外Aliases表的域也像aaa.pl,bbb.pl

我只想从表中选择别名,该别名的域与分配给用户的域相同。 因此,用户X只能看到别名“哪里是同一域”。

后端

这是我的控制器

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;
  }

和用户详细信息

 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?

什么是最佳解决方案?

-编辑 我做了这样的事情:

 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)
      );
    }
  }

0 个答案:

没有答案