【问题标题】:Node JS and Access ControlNode JS 和访问控制
【发布时间】:2018-04-29 11:56:47
【问题描述】:

在我的项目中,我使用的是 RBAC Access Control。我已经创建了带有 index.js 的访问控制目录,其中我正在创建“grantsObject”

'use strict'

const AccessControl = require('accesscontrol');

let grantsObject = {
    admin: {
        // Extends user and can delete and update any video or post

        video: {
            'create:any': ['*'],
            'read:any': ['*'],
            'update:any': ['*'], // Admin privilege
            'delete:any': ['*']  // Admin privilege
        },
        post: {
            'create:any': ['*'],
            'read:any': ['*'],
            'update:any': ['*'], // Admin privilege
            'delete:any': ['*']  // Admin privilege
        }

    },
    user: {
        video: {
            'create:any': ['*'],
            'read:any': ['*']
        },
        post: {
            'create:any': ['*'],
            'read:any': ['*']
        }
    }
};

const ac = new AccessControl(grantsObject);

module.exports = ac;

稍后在路线中我需要这个对象

var ac = require('../config/access-control');

查看权限:

const permission = ac.can(req.user.userRole).readAny('post');
if (!permission.granted) {
    return res.status(403).end();
}

一切正常,但我的问题是关于“grantsObject”。我希望有更好的代码组织。在我的项目中,我有很多角色,代码变得重复。

管理员具有某种继承性,只是扩展了用户权限。有什么办法可以避免在 admin 对象中处理用户权限?

【问题讨论】:

    标签: node.js express privileges organization


    【解决方案1】:

    您可能希望先声明用户权限,然后再声明扩展用户权限的管理员权限。 例如

    // Node.js v9.4.0
    const user = {
        video: {
            'create:any': ['*'],
            'read:any': ['*']
        },
        post: {
            'create:any': ['*'],
            'read:any': ['*']
        }
    }
    
    const admin = {
        video: {
            ...user.video,
            'update:any': ['*'],
            'delete:any': ['*']
            }
        ,
        post: {
            ...user.post,
            'update:any': ['*'],
            'delete:any': ['*']
        }
    }
    
    const grantsObject = {
        admin,
        user,
    };
    

    以上示例假设用户和管理员对同一资源共享相同的权限。

    【讨论】:

    • 嗨,你有什么关于如何实现“createOWN, readOWN...”的好例子吗?
    猜你喜欢
    • 2022-01-26
    • 2017-02-06
    • 2020-06-06
    • 2018-06-22
    • 2022-01-24
    • 2018-10-01
    • 2012-06-18
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多