acklen-keystone
Version:
Web Application Framework and Admin GUI / Content Management System built on Express.js and Mongoose
79 lines (71 loc) • 2.88 kB
JavaScript
import { browserHistory } from 'react-router';
const allowMenuOption = (section, userIsAdministrator, userIsEditor) => {
const adminOnlyMenuOptions = ['menus', 'users', 'agaFamilyWebsite', 'globalFooter'];
const adminOrEditorOnlyMenuOptions = ['blog', 'modules', 'home', 'pageBuilder'];
if (adminOnlyMenuOptions.indexOf(section.key) > -1) {
return userIsAdministrator;
}
if (adminOrEditorOnlyMenuOptions.indexOf(section.key) > -1) {
return userIsAdministrator || userIsEditor;
}
return true;
};
const allowSubMenuOption = (item, userIsAdministrator, userIsEditor) => {
const adminOnlySubMenuOptions = ['BlogFooter', 'CustomCss', 'GlobalFooter'];
const adminOrEditorOnlySubMenuOptions = ['FooterSnippet', 'GuidelinesFooter', 'GraphicBannerSnippet',
'PatientCenterGraphicBanners', 'BlogLatestIssue'];
if (adminOnlySubMenuOptions.indexOf(item.key) > -1) {
return userIsAdministrator;
}
if (adminOrEditorOnlySubMenuOptions.indexOf(item.key) > -1) {
return userIsAdministrator || userIsEditor;
}
return true;
};
const checkPermissionForUserByPath = (location, index) => {
const arrPath = location.pathname.split('/');
const path = arrPath[arrPath.length - index];
const userIsAdministrator = Keystone.user.isAdministrator;
const userIsEditor = Keystone.user.isEditor;
const adminOnlyMenuOptions = ['blog-footers', 'blog-footer-versions',
'custom-css', 'menus', 'users', 'agafamily-websites', 'global-footer-links', 'global-footer-columns',
'global-footers', 'global-footer-link-versions', 'global-footer-column-versions',
'global-footer-versions'];
const adminOrEditorOnlySubMenuOptions = ['homes', 'home-versions',
'body-fields', 'body-field-versions',
'credit-snippets', 'credit-snippet-versions',
'footer-snippets', 'footer-snippet-versions',
'graphic-banner-snippets', 'graphic-banner-snippet-versions',
'graphic-toggles', 'graphic-toggle-versions',
'hero-banners', 'hero-banner-versions',
'key-dates', 'key-date-versions',
'labels', 'label-versions',
'link-boxes', 'link-box-versions',
'signposts', 'signpost-versions',
'simple-cards', 'simple-card-versions',
'sub-tab-navs', 'sub-tab-nav-versions',
'toggles', 'toggle-versions',
'patient-center-graphic-banners', 'patient-center-graphic-banners-versions',
'guidelines-footer', 'guidelines-footer-versions',
'blog-latest-issues', 'blog-latest-issue-versions',
'page-builders'];
if (adminOnlyMenuOptions.indexOf(path) > -1) {
if (!userIsAdministrator) {
if (path === 'users' && arrPath.length > 3
&& arrPath[3] === Keystone.user.id) {
return;
}
browserHistory.push('/keystone/');
}
}
if (adminOrEditorOnlySubMenuOptions.indexOf(path) > -1) {
if (!userIsAdministrator && !userIsEditor) {
browserHistory.push('/keystone/');
}
}
};
module.exports = {
allowMenuOption,
allowSubMenuOption,
checkPermissionForUserByPath,
};