В моем проекте я использую 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?