Mercurial > gemma
changeset 278:9c1dfadb53aa usermanagement
feat: usermanagement - route established and secured
Added new route for prototypical implementation of usermanagement.
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Mon, 30 Jul 2018 16:02:19 +0200 |
parents | 807efc83e507 |
children | 1bca073ff301 0b4c824517c4 |
files | client/src/components/Sidebar.vue client/src/router.js client/src/stores/user.js client/src/views/Main.vue client/src/views/Users.vue |
diffstat | 5 files changed, 62 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/client/src/components/Sidebar.vue Mon Jul 30 13:31:35 2018 +0200 +++ b/client/src/components/Sidebar.vue Mon Jul 30 16:02:19 2018 +0200 @@ -2,10 +2,13 @@ <div :class="sidebarStyle"> <div :class="collapseStyle"><i @click="collapse" :class="collapseicon"></i></div> <nav :class="menuStyle"> - <a class="nav-link active" href="#">Riverbed morphology</a> + <router-link to="/">Riverbed Morphology</router-link> <a class="nav-link" href="#">Link</a> <a class="nav-link" href="#">Link</a> <a class="nav-link disabled" href="#">Disabled</a> + <div v-if="is_waterway_admin"> + <router-link to="users">Users</router-link> + </div> </nav> <div :class="userinfoStyle"> <div class="userinfo"> @@ -23,8 +26,9 @@ export default { name: "sidebar", + props: ["isOverlay"], computed: { - ...mapGetters("user", ["userinfo"]), + ...mapGetters("user", ["userinfo", "is_waterway_admin"]), collapseicon() { return { fa: true, @@ -59,6 +63,7 @@ sidebarStyle() { return { sidebar: true, + overlay: this.isOverlay, sidebarcollapsed: this.collapsed, sidebarextended: !this.collapsed }; @@ -130,13 +135,16 @@ margin-top: auto; } .sidebar { - position: absolute; - z-index: 1; background-color: #ffffff; padding-top: $large-offset; height: 100vh; } +.overlay { + position: absolute; + z-index: 1; +} + .sidebarcollapsed { width: $sidebar-collapsed-width; transition: $transition;
--- a/client/src/router.js Mon Jul 30 13:31:35 2018 +0200 +++ b/client/src/router.js Mon Jul 30 16:02:19 2018 +0200 @@ -1,6 +1,7 @@ import Vue from "vue"; import Router from "vue-router"; import Login from "./views/Login.vue"; +import Users from "./views/Users.vue"; import Main from "./views/Main.vue"; import store from "./store"; import { sessionStillActive, toMillisFromString } from "./lib/session"; @@ -15,6 +16,22 @@ component: Login }, { + path: "/users", + name: "users", + component: Users, + meta: { + requiresAuth: true + }, + beforeEnter: (to, from, next) => { + const isWaterwayAdmin = store.getters["user/is_waterway_admin"]; + if (!isWaterwayAdmin) { + next("/"); + } else { + next(); + } + } + }, + { path: "/", name: "mainview", component: Main,
--- a/client/src/stores/user.js Mon Jul 30 13:31:35 2018 +0200 +++ b/client/src/stores/user.js Mon Jul 30 16:02:19 2018 +0200 @@ -20,6 +20,9 @@ }, expires: state => { return state.expires; + }, + is_waterway_admin: state => { + return state.roles.includes("waterway_admin"); } }, mutations: {
--- a/client/src/views/Main.vue Mon Jul 30 13:31:35 2018 +0200 +++ b/client/src/views/Main.vue Mon Jul 30 16:02:19 2018 +0200 @@ -1,6 +1,6 @@ <template> <div class="main d-flex"> - <Sidebar></Sidebar> + <Sidebar v-bind:isOverlay="true"></Sidebar> <Map></Map> </div> </template>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/views/Users.vue Mon Jul 30 16:02:19 2018 +0200 @@ -0,0 +1,29 @@ +<template> + <div class="main d-flex"> + <Sidebar v-bind:isOverlay="false"></Sidebar> + <div class="d-flex flex-row content"> + <h1>User Management</h1> + </div> + </div> +</template> + +<style lang="scss"> +.main { + height: 100vh; +} + +.content { + width: 99%; + margin-left: 1%; +} +</style> + +<script> +import Sidebar from "../components/Sidebar"; +export default { + name: "userview", + components: { + Sidebar + } +}; +</script>