【问题标题】:Create a permission based system创建基于权限的系统
【发布时间】:2014-08-01 11:42:54
【问题描述】:

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

我在想这样的事情:

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

似乎有更简单的方法可以做到这一点。

【问题讨论】:

  • 您是否考虑过使用细粒度权限?这样您就可以检查用户是否可以执行某些操作(例如,删除博客 cmets - 可以设置为博客所有者删除他们自己博客上的 cmets 或管理员可以删除所有博客上的博客 cmets)?

标签: javascript node.js permissions


【解决方案1】:

为什么不试试 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,管理员案例也会触发一个模块案例和一个用户案例,默认情况下一个模块案例也会触发一个用户案例等。

【讨论】:

  • 如果没有分配 user.group,你将如何做到这一点不会中断?
  • 不会。这就是default 案例的原因。
【解决方案2】:

您可以引入一组权限,例如PERMISSION_TO_DO_THING1,等等。接下来 - 角色,如ROLE_ADMINROLE_SPECIAL_GUY 等。每个角色都是一组权限。请注意,较高角色包含较低角色可以执行的所有必要权限。这是合乎逻辑的事情,这取决于您的应用程序和实施。无论如何,最后你需要一些像userHasPermission(user, permission)这样的方法,如果它是true - 他可以做事。

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

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

【讨论】:

    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 2020-03-05
    • 2011-03-11
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多