feat: renamed prefix to admin:, settigns and dashboard privs

This commit is contained in:
Julian Lam
2020-06-02 15:41:38 -04:00
parent 5f20eaba01
commit 16aec40e18
5 changed files with 31 additions and 15 deletions

View File

@@ -34,5 +34,7 @@
"purge": "Purge",
"moderate": "Moderate",
"manage-categories": "Manage Categories"
"admin-dashboard": "Dashboard",
"admin-categories": "Categories",
"admin-settings": "Settings"
}

View File

@@ -146,7 +146,7 @@ define('admin/manage/privileges', [
autocomplete.user(inputEl, function (ev, ui) {
var defaultPrivileges;
if (ajaxify.data.url === '/admin/manage/privileges/admin') {
defaultPrivileges = ['manage:categories'];
defaultPrivileges = ['admin:dashboard'];
} else {
defaultPrivileges = cid ? ['find', 'read', 'topics:read'] : ['chat'];
}
@@ -180,7 +180,7 @@ define('admin/manage/privileges', [
autocomplete.group(inputEl, function (ev, ui) {
var defaultPrivileges;
if (ajaxify.data.url === '/admin/manage/privileges/admin') {
defaultPrivileges = ['groups:manage:categories'];
defaultPrivileges = ['groups:admin:dashboard'];
} else {
defaultPrivileges = cid ? ['groups:find', 'groups:read', 'groups:topics:read'] : ['groups:chat'];
}

View File

@@ -141,7 +141,7 @@ module.exports = function (middleware) {
}
// Otherwise, check for privilege based on page (if not in mapping, deny access)
const path = req.path.replace(/^(\/api)?\/admin\//g, '');
const path = req.path.replace(/^(\/api)?\/admin\/?/g, '');
const privilege = privileges.admin.resolve(path);
if (!privilege || !await privileges.admin.can(privilege, req.uid)) {
return controllers.helpers.notAllowed(req, res);

View File

@@ -13,41 +13,56 @@ module.exports = function (privileges) {
privileges.admin = {};
privileges.admin.privilegeLabels = [
{ name: '[[admin/manage/privileges:manage-categories]]' },
{ name: '[[admin/manage/privileges:admin-dashboard]]' },
{ name: '[[admin/manage/privileges:admin-categories]]' },
{ name: '[[admin/manage/privileges:admin-settings]]' },
];
privileges.admin.userPrivilegeList = [
'manage:categories',
'admin:dashboard',
'admin:categories',
'admin:settings',
];
privileges.admin.groupPrivilegeList = privileges.admin.userPrivilegeList.map(privilege => 'groups:' + privilege);
// Mapping for a page route (via direct match or regexp) to a privilege
privileges.admin.routeMap = {
'manage/categories': 'manage:categories',
dashboard: 'admin:dashboard',
'manage/categories': 'admin:categories',
};
privileges.admin.routeRegexpMap = {
'^manage/categories/\\d+': 'manage:categories',
'^manage/categories/\\d+': 'admin:categories',
'^settings/[\\w\\-]+$': 'admin:settings',
};
// Mapping for socket call methods to a privilege
// In NodeBB v2, these socket calls will be removed in favour of xhr calls
privileges.admin.socketMap = {
'admin.categories.getAll': 'manage:categories',
'admin.categories.create': 'manage:categories',
'admin.categories.update': 'manage:categories',
'admin.categories.purge': 'manage:categories',
'admin.categories.copySettingsFrom': 'manage:categories',
'admin.rooms.getAll': 'admin:dashboard',
'admin.analytics.get': 'admin:dashboard',
'admin.categories.getAll': 'admin:categories',
'admin.categories.create': 'admin:categories',
'admin.categories.update': 'admin:categories',
'admin.categories.purge': 'admin:categories',
'admin.categories.copySettingsFrom': 'admin:categories',
'admin.getSearchDict': 'admin:settings',
'admin.config.setMultiple': 'admin:settings',
'admin.config.remove': 'admin:settings',
};
privileges.admin.resolve = (path) => {
if (privileges.admin.routeMap[path]) {
return privileges.admin.routeMap[path];
} else if (path === '') {
return 'manage:dashboard';
}
let privilege;
Object.keys(privileges.admin.routeRegexpMap).forEach((regexp) => {
if (!privilege) {
console.log('here', new RegExp(regexp), path);
if (new RegExp(regexp).test(path)) {
privilege = privileges.admin.routeRegexpMap[regexp];
}

View File

@@ -61,7 +61,6 @@ Categories.setPrivilege = async function (socket, data) {
throw new Error('[[error:no-user-or-group]]');
}
console.log('setting', data);
await privileges.categories[data.set ? 'give' : 'rescind'](
Array.isArray(data.privilege) ? data.privilege : [data.privilege], data.cid, data.member
);