执行基于角色的访问控制的正确方法



我的后端使用nodejs,expressjs。我正在尝试创建一个具有角色库访问控制的简单web应用程序,但我不确定我的操作方式是否正确/推荐。

我有三个角色,分别是超级管理员管理员户,我就是这样做的:

const checkRoleMiddleware = (req, res, next) => {
const getPostUserId = getPostFromDb(req.params.postId);
const getPostUserData = getPostUserFromDb(getPostUserId);

if(req.user.id === getPostUserData.id){
/* next */
}else if(req.user.permission === 'admin'){

if(/* Check some other things & compare some other things */){
/* next */
}else{
/* return unauthorized */     
}

}else if(req.user.permission === 'super admin') {
/* next */     
}else{
/* return unauthorized */
}
};

/* use checkRoleMiddleware on this route*/
app.post('/user/post/edit/:postId', checkRoleMiddleware, (req,res) => {
/* Do something */
});

这是在express应用程序中执行角色库访问控制的安全、正确/推荐的方法吗?如果我有更多的角色,我是否必须创建更多的if语句?还有其他更好的方法吗?

我可以提出3种不同的方法来解决这个问题(除了你现在的方法之外,因为这也是一种正确的方法(

选项1您可以为每个组(超级管理员-2、管理员-1、用户-0(分配一个整数值,对于基于角色的访问控制,只需检查用户组值是否高于分配的值。

选项2如果要允许不同的角色执行不同的操作,可以为每个操作存储一组允许的角色/角色ID,并检查其中是否包括用户角色。

选项3您可以将操作角色/用户角色存储为二进制值。例如,您将1分配给用户,将2分配给管理员,将4分配给超级管理员,将8分配给超级超级管理员。这样,如果您将数字9分配给用户,它们将同时是user和SUPER SUPER ADMIN,从而使您能够更灵活地处理项目中的角色。您还可以允许特定角色执行特定操作,因此,例如,如果您希望操作仅由管理员或更高级别的人员执行,则可以为其分配值14(2+4+8(。

相关内容

最新更新