Javascript 创建基于权限的系统

Javascript 创建基于权限的系统,javascript,node.js,permissions,Javascript,Node.js,Permissions,我想创建一个系统,其中可能有4-5种类型的用户组可以访问某些东西。权限越高,他们可以做的事情就越多。这对我来说很简单,但对我来说困难的部分是创建一个系统,在这个系统中,上级可以做下级可以做的任何事情,而下级不能做上级可以做的事情 我是这样想的: if (user.group === "mod" || user.group === "admin"){ // do stuff if (user.group === "admin"){ // do stuff } } 不过,似乎

我想创建一个系统,其中可能有4-5种类型的用户组可以访问某些东西。权限越高,他们可以做的事情就越多。这对我来说很简单,但对我来说困难的部分是创建一个系统,在这个系统中,上级可以做下级可以做的任何事情,而下级不能做上级可以做的事情

我是这样想的:

if (user.group === "mod" || user.group === "admin"){
  // do stuff
  if (user.group === "admin"){
     // do stuff
  }
}

不过,似乎有一种更简单的方法。为什么不试试switch语句呢

switch(user.group) {
    case 'admin':
        // admin permissions
    case 'mod':
        // admin permission (waterfall effect)
        // mod permission
    case 'user':
        // admin permission (waterfall effect)
        // mod permission (waterfall effect)
        // user permissions
    default:
        // default permissions;
        break;
}
我不明白这为什么不起作用


基本上,通过不向每个开关添加
break
,管理员案例也会触发一个mod案例和一个用户案例,默认情况下,mod案例也会触发一个用户案例等。

您可以引入一组权限,如
PERMISSION\u to\u DO\u THING1
,等等。接下来是角色,如
ROLE\u ADMIN
ROLE\u SPECIAL\u GUY
,等等。每个角色都是一组权限。请注意,较高的角色包含较低角色可以执行的所有必要权限。这是合乎逻辑的事情,这取决于你的应用程序和实现。无论如何,最后你需要一些方法,比如
userhaspowmission(user,permission)
,如果它
为真的话
,他可以做一些事情

if (userHasPermission(user, PERMISSION_TO_ADD_USER)) {
    // do things
}

if (userHasPermission(user, PERMISSION_TO_DELETE_USER)) {
    // do things
}

您是否考虑过使用细粒度权限?这样,您就可以检查用户是否可以执行某些操作(例如,删除博客评论——可以设置为博客所有者删除他们自己博客上的评论,或者管理员可以删除所有博客上的博客评论)?如果没有分配user.group,您将如何使其不中断?不会。这就是为什么会出现
default
情况的原因。