From 00a2c29a09408d6fba278cf199a681ad15f98c7e Mon Sep 17 00:00:00 2001 From: Nikolay <46225163+vigdorov@users.noreply.github.com> Date: Tue, 8 Sep 2020 23:05:42 +0300 Subject: [PATCH] =?UTF-8?q?HM-136.=20=D0=97=D0=B0=D0=BA=D1=80=D1=8B=D1=82?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF=D0=B0=20?= =?UTF-8?q?=D0=BA=20=D1=81=D1=82=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0=D0=BC?= =?UTF-8?q?=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=BE=D1=81=D1=82=D1=8B?= =?UTF-8?q?=D1=85=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D0=B5=D0=B9=20(#68)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app.js | 2 +- src/core/components/main-menu/MainMenu.js | 13 ++++++++++--- .../router-pages-container/RouterPagesContainer.js | 9 +++++++++ src/pages/users/components/page/Page.js | 8 ++++++-- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/app.js b/src/app.js index b501391..acc0efc 100644 --- a/src/app.js +++ b/src/app.js @@ -37,7 +37,7 @@ const initAppComponents = () => { routerPagesContainer.addRoutes([ {url: ROUTES.MAIN, pageComponent: MainPage}, {url: ROUTES.STORE, pageComponent: ApiPage}, - {url: ROUTES.LOGS, pageComponent: LogsPage}, + {url: ROUTES.LOGS, pageComponent: LogsPage, onlyAdmin: true}, {url: ROUTES.USERS, pageComponent: UsersPage}, {url: ROUTES.LOGIN, pageComponent: LoginPage}, {url: ROUTES.PROFILE, pageComponent: ProfilePage}, diff --git a/src/core/components/main-menu/MainMenu.js b/src/core/components/main-menu/MainMenu.js index 122de39..47428f6 100644 --- a/src/core/components/main-menu/MainMenu.js +++ b/src/core/components/main-menu/MainMenu.js @@ -4,6 +4,7 @@ import routeService from '../../../services/RouteService'; import './MainMenu.css'; import {EVENTS, ROUTES, TAG_NAME} from '../../consts'; import tokenApi from '../../../api/TokenAPI'; +import userInfoService from '../../../services/UserInfoService'; const NAV_MENU = [ { @@ -17,6 +18,7 @@ const NAV_MENU = [ { title: 'Журнал', url: ROUTES.LOGS, + onlyAdmin: true, }, { title: 'Пользователи', @@ -76,7 +78,7 @@ class MainMenu extends Component { } render = () => { - this.menuItems = NAV_MENU.map(({url, title, className = ''}) => { + this.menuItems = NAV_MENU.map(({url, title, className = '', onlyAdmin}) => { const li = this.createElement({ tagName: TAG_NAME.LI, parentNode: this.buttonsContainer, @@ -99,7 +101,7 @@ class MainMenu extends Component { } }); - return {url, link}; + return {url, li, link, onlyAdmin}; }); } @@ -111,7 +113,12 @@ class MainMenu extends Component { this.mainNode.remove(); } - showMenu = () => { + showMenu = async () => { + const {is_admin} = await userInfoService.getUserInfo(); + this.menuItems.forEach(({li, onlyAdmin}) => { + const isShow = !onlyAdmin || is_admin; + li.style.display = isShow ? 'list-item' : 'none'; + }); document.body.prepend(this.mainNode); } } diff --git a/src/core/components/router-pages-container/RouterPagesContainer.js b/src/core/components/router-pages-container/RouterPagesContainer.js index 98f9b20..49c53f9 100644 --- a/src/core/components/router-pages-container/RouterPagesContainer.js +++ b/src/core/components/router-pages-container/RouterPagesContainer.js @@ -3,6 +3,7 @@ import routeService from '../../../services/RouteService'; import NotFoundPage from '../../../pages/not-found/components/page/Page'; import {EVENTS, ROUTES} from '../../consts'; +import userInfoService from '../../../services/UserInfoService'; /** * @interface Route @@ -59,6 +60,14 @@ class RouterPagesContainer extends Component { this.currentPage = new PageComponent('#page', this.mainNode); } }); + + this.addSubscribe(userInfoService, EVENTS.CHANGE_USER_INFO, ({is_admin}) => { + const {url} = routeService.getUrlData(); + const currentRoute = this.routes.find((route) => route.url === url); + if (currentRoute.onlyAdmin && !is_admin) { + routeService.goTo(ROUTES.MAIN); + } + }); } /** diff --git a/src/pages/users/components/page/Page.js b/src/pages/users/components/page/Page.js index 17b5afb..cbc5696 100644 --- a/src/pages/users/components/page/Page.js +++ b/src/pages/users/components/page/Page.js @@ -27,7 +27,7 @@ class UsersPage extends Component { }); this.addSubscribe(userInfoService, EVENTS.CHANGE_USER_INFO, ({is_admin}) => { - this.createUserButton.disabled = !is_admin; + this.setCreateUserButton(is_admin); }); this.addEventListener(this.createUserButton, EVENTS.CLICK, () => { @@ -61,9 +61,13 @@ class UsersPage extends Component { this.initPage(); } + setCreateUserButton = (isAdmin) => { + this.createUserButton.style.display = isAdmin ? 'inline-block' : 'none'; + } + initPage = async () => { const user = await userInfoService.getUserInfo(); - this.createUserButton.disabled = !user.is_admin; + this.setCreateUserButton(user.is_admin); this.userList = await usersServiceApi.request(); this.renderTable(); }