javascript - 仅选择基于用户“权限”的域的记录
问题描述
大家好,我想获得一些关于如何解决我的问题的提示。
我得到了存储用户详细信息的表格,例如:
ID、FIRST_NAME、LAST_NAME EMAIL、密码、角色、域
我还得到了名为 Aliases 的表
ID、DOMAIN_ID、DOMAIN、DESTINATION
在用户表中,角色表示管理员、版主、用户等,域例如是 aaa.pl、bbb.pl。别名表也有像 aaa.pl、bbb.pl 这样的域
我想仅从表中选择域与分配给用户的域相同的别名。所以用户 X 只能看到别名 Where 是同一个域。
后端
这是我的控制器
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)
);
}
}
解决方案
推荐阅读
- node.js - TS1086:无法使用 docker-compose 在 Angular 8 应用程序的环境上下文中声明访问器
- c# - 项目不兼容netcoreapp3.0 win-x64。项目服务支持:netcoreapp3.1 (.NETCoreApp,Version=v3.1)
- android - 如何以编程方式将数据库文件从原始文件夹复制到android中的项目数据库
- css - Bootstrap 4 导航栏,左侧有品牌,左侧、右侧和中间有链接
- r - Shinyapp渲染降价中的目录
- laravel - 播种:在 Container.php 第 729 行中的 UsersTableSeeder:类 UsersTableSeeder 不存在
- microsoft-graph-api - Microsoft Event Graph API India dateTime timeZone 问题
- flutter - 如何用 ValueListenableBuilder 小部件包装复选框小部件?
- javascript - 无法使用点表示法定位 JSON 中的嵌套对象
- spring-boot - 跨不同项目模块实现接口的最佳实践