【发布时间】:2022-01-26 05:29:24
【问题描述】:
我是一个新人,我有一个任务,在我们的项目中,我们有 7 个角色,即
- 管理员
- 保险公司
- 投资者
- 客户
- 版主
- 贷方
- 代理
管理员可以访问所有 API,但某些 API 可以由管理员和版主或管理员或保险公司或管理员或投资者等访问。可能有 30 多种排列和组合。有什么简单的方法可以做到这一点吗?任何动态的方法请帮忙。
我写的这段代码是中间件
const isUser = (req, res, next) => {
if (req.user && req.roles[0].toUpperCase == 'USER') {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isInvestor = (req, res, next) => {
if (req.user && req.roles[0].toUpperCase == 'INVESTOR') {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isModerator = (req, res, next) => {
if (req.user && req.roles[0].toUpperCase == 'MODERATOR') {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isAdmin = (req, res, next) => {
if (req.user && req.roles[0] == 'ADMIN') {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isInsurer = (req, res, next) => {
if (req.user && req.roles[0].toUpperCase == 'INSURER') {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isNominee = (req, res, next) => {
if (req.user && req.roles[0].toUpperCase == 'NOMINEE') {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isAgent = (req, res, next) => {
if (req.user && req.roles[0].toUpperCase == 'AGENT') {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isLender = (req, res, next) => {
if (req.user && req.roles[0].toUpperCase == 'LENDER') {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isAdminOrInvestor = (req, res, next) => {
if (req.user && (req.roles[0].toUpperCase == 'INVESTOR'||req.roles[0].toUpperCase == 'ADMIN')) {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
const isAdminOrInsurer = (req, res, next) => {
if (req.user && (req.roles[0].toUpperCase == 'INSURER'||req.roles[0].toUpperCase == 'ADMIN')) {
next();
} else {
return res.status(401).send({
message: `You don't have correct access`,
});
}
};
【问题讨论】:
-
您可以探索 CASL casl.js.org/v5/en。我相信它应该可以处理您的大部分案件。
-
谢谢@UjwalAgrawal 但我想在后端和 NPM 网站上执行此操作“此软件包已被弃用”此评论显示
-
据我所知,这个项目还在积极开发中。您可以在github.com/stalniy/casl 访问该库,并且存储库的所有者正在回答问题部分中提出的问题。如果这不适合您的需要,也许您可以探索 node-casbin github.com/casbin/node-casbin。我以前没有亲自使用过它,但它有接近 2k 的 GitHub 星数。
标签: node.js angular express rbac