Added RBAC to logging page. Removed /check-auth route references.
[osm/UI.git] / skyquake / framework / widgets / skyquake_nav / skyquakeNav.jsx
index 51a21a0..99d1482 100644 (file)
@@ -25,9 +25,11 @@ import 'style/common.scss';
 import './skyquakeNav.scss';
 import SelectOption from '../form_controls/selectOption.jsx';
 import {FormSection} from '../form_controls/formControls.jsx';
+import {isRBACValid, SkyquakeRBAC} from 'widgets/skyquake_rbac/skyquakeRBAC.jsx';
 
 //Temporary, until api server is on same port as webserver
-var rw = require('utils/rw.js');
+import rw from 'utils/rw.js';
+
 var API_SERVER = rw.getSearchParams(window.location).api_server;
 var UPLOAD_SERVER = rw.getSearchParams(window.location).upload_server;
 
@@ -35,23 +37,6 @@ var UPLOAD_SERVER = rw.getSearchParams(window.location).upload_server;
 // Internal classes/functions
 //
 
-class LogoutAppMenuItem extends React.Component {
-    handleLogout() {
-        Utils.clearAuthentication();
-    }
-    render() {
-        return (
-            <div className="app">
-                <h2>
-                    <a onClick={this.handleLogout}>
-                        Logout
-                    </a>
-                </h2>
-            </div>
-        );
-    }
-}
-
 class SelectProject extends React.Component {
     constructor(props) {
         super(props);
@@ -112,7 +97,7 @@ class UserNav extends React.Component {
         return (
             <div className="app">
                 <h2>
-                    {userProfileLink}
+                    USER: {userProfileLink}
                     <span className="oi" data-glyph="caret-bottom"></span>
                 </h2>
                 <ul className="menu">
@@ -189,6 +174,9 @@ export default class skyquakeNav extends React.Component {
 skyquakeNav.defaultProps = {
     nav: {}
 }
+skyquakeNav.contextTypes = {
+  userProfile: React.PropTypes.object
+};
 /**
  * Returns a React Component
  * @param  {object} link  Information about the nav link
@@ -256,11 +244,25 @@ export function buildNav(nav, currentPlugin, props) {
     let navList = [];
     let navListHTML = [];
     let secondaryNav = [];
+    let adminNav = [];
     let self = this;
+    const User = this.context.userProfile;
     self.hasSubNav = {};
     let secondaryNavHTML = (
         <div className="secondaryNav" key="secondaryNav">
             {secondaryNav}
+            <div className="app admin">
+                <h2>
+                    <a>
+                        ADMIN <span className="oi" data-glyph="caret-bottom"></span>
+                    </a>
+                </h2>
+                <ul className="menu">
+                    {
+                        adminNav
+                    }
+                </ul>
+            </div>
             <SelectProject
                 onSelectProject={props.store.selectActiveProject}
                 projects={props.projects}
@@ -291,23 +293,38 @@ export function buildNav(nav, currentPlugin, props) {
                 label: nav[k].label || k,
                 route: route
             });
+            let shouldAllow = nav[k].allow || ['*'];
             if (nav[k].pluginName == currentPlugin) {
                 navClass += " active";
             }
             NavList = nav[k].routes.map(buildNavListItem.bind(self, k));
             navItem.priority = nav[k].priority;
             navItem.order = nav[k].order;
-            navItem.html = (
-                <div key={k} className={navClass}>
-                    <h2>{dashboardLink} {self.hasSubNav[k] ? <span className="oi" data-glyph="caret-bottom"></span> : ''}</h2>
-                    <ul className="menu">
-                        {
-                            NavList
-                        }
-                    </ul>
-                </div>
-            );
+            if(nav[k].admin_link) {
+
+                if (isRBACValid(User, shouldAllow) ){
+                    adminNav.push((
+                        <li key={nav[k].name}>
+                            {dashboardLink}
+                        </li>
+                    ))
+                }
+            } else {
+                if (isRBACValid(User, shouldAllow) ){
+                    navItem.html = (
+                        <div  key={k} className={navClass}>
+                            <h2>{dashboardLink} {self.hasSubNav[k] ? <span className="oi" data-glyph="caret-bottom"></span> : ''}</h2>
+                            <ul className="menu">
+                                {
+                                    NavList
+                                }
+                            </ul>
+                        </div>
+                    );
+                }
             navList.push(navItem)
+            }
+
         }
     }
     //Sorts nav items by order and returns only the markup