节点 JS 和访问控制
Node JS and Access Control
在我的项目中,我使用的是 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 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,
};
以上示例假定用户和管理员对同一资源共享相同的权限。
在我的项目中,我使用的是 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 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,
};
以上示例假定用户和管理员对同一资源共享相同的权限。