Add proper logout logic to menu; let caller hide root options, about link
This commit is contained in:
parent
c17c25b4cb
commit
0b4e4f9894
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
<b-dropdown aria-role="menu">
|
<b-dropdown aria-role="menu">
|
||||||
<button class="button is-primary"
|
<button class="button is-primary"
|
||||||
:class="{'is-danger': user_is_root}"
|
:class="{'is-danger': exposeRoot && user_is_root}"
|
||||||
slot="trigger">
|
slot="trigger">
|
||||||
<b-icon icon="fas fa-user"></b-icon>
|
<b-icon icon="fas fa-user"></b-icon>
|
||||||
<span>{{ user.short_name }}</span>
|
<span>{{ user.short_name }}</span>
|
||||||
|
@ -15,14 +15,14 @@
|
||||||
|
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
|
|
||||||
<b-dropdown-item v-if="$store.state.user_is_admin && !user_is_root"
|
<b-dropdown-item v-if="exposeRoot && $store.state.user_is_admin && !user_is_root"
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
has-link
|
has-link
|
||||||
class="root-user">
|
class="root-user">
|
||||||
<a href="#" @click.prevent="becomeRoot()">Become root</a>
|
<a href="#" @click.prevent="becomeRoot()">Become root</a>
|
||||||
</b-dropdown-item>
|
</b-dropdown-item>
|
||||||
|
|
||||||
<b-dropdown-item v-if="user_is_root"
|
<b-dropdown-item v-if="exposeRoot && user_is_root"
|
||||||
aria-role="menuitem"
|
aria-role="menuitem"
|
||||||
has-link
|
has-link
|
||||||
class="root-user">
|
class="root-user">
|
||||||
|
@ -30,10 +30,11 @@
|
||||||
</b-dropdown-item>
|
</b-dropdown-item>
|
||||||
|
|
||||||
<b-dropdown-item aria-role="menuitem" has-link>
|
<b-dropdown-item aria-role="menuitem" has-link>
|
||||||
<router-link to="/logout">Logout</router-link>
|
<a href="#" @click.prevent="logout()">Logout</a>
|
||||||
</b-dropdown-item>
|
</b-dropdown-item>
|
||||||
|
|
||||||
<b-dropdown-item aria-role="menuitem" has-link>
|
<b-dropdown-item v-if="includeAboutLink"
|
||||||
|
aria-role="menuitem" has-link>
|
||||||
<router-link to="/about">About</router-link>
|
<router-link to="/about">About</router-link>
|
||||||
</b-dropdown-item>
|
</b-dropdown-item>
|
||||||
|
|
||||||
|
@ -70,22 +71,14 @@ export default {
|
||||||
name: 'ByjoveMenu',
|
name: 'ByjoveMenu',
|
||||||
props: {
|
props: {
|
||||||
appsettings: Object,
|
appsettings: Object,
|
||||||
feedbackUrl: {
|
|
||||||
type: String,
|
|
||||||
default: '/api/feedback',
|
|
||||||
},
|
|
||||||
becomeRootUrl: {
|
|
||||||
type: String,
|
|
||||||
default: '/api/become-root',
|
|
||||||
},
|
|
||||||
stopRootUrl: {
|
|
||||||
type: String,
|
|
||||||
default: '/api/stop-root',
|
|
||||||
},
|
|
||||||
showLoginButton: {
|
showLoginButton: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
|
logoutUrl: {
|
||||||
|
type: String,
|
||||||
|
default: '/api/logout',
|
||||||
|
},
|
||||||
allowFeedback: {
|
allowFeedback: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: null,
|
default: null,
|
||||||
|
@ -94,6 +87,26 @@ export default {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
|
feedbackUrl: {
|
||||||
|
type: String,
|
||||||
|
default: '/api/feedback',
|
||||||
|
},
|
||||||
|
includeAboutLink: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
exposeRoot: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true,
|
||||||
|
},
|
||||||
|
becomeRootUrl: {
|
||||||
|
type: String,
|
||||||
|
default: '/api/become-root',
|
||||||
|
},
|
||||||
|
stopRootUrl: {
|
||||||
|
type: String,
|
||||||
|
default: '/api/stop-root',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
ByjoveFeedback,
|
ByjoveFeedback,
|
||||||
|
@ -123,6 +136,23 @@ export default {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
|
||||||
|
logout() {
|
||||||
|
// submit user logout request to backend
|
||||||
|
this.$http.post(this.logoutUrl).then(response => {
|
||||||
|
|
||||||
|
// do logout proper, within our app
|
||||||
|
this.$logoutUser()
|
||||||
|
|
||||||
|
// re-fetch session to get fresh XSRF token cookie; our http
|
||||||
|
// interceptor will handle the rest of that for us. once we
|
||||||
|
// have token we show the login form again
|
||||||
|
this.$http.get('/api/session').then(response => {
|
||||||
|
this.$router.push('/login')
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
becomeRoot() {
|
becomeRoot() {
|
||||||
if (this.user_is_root || !this.$store.state.user_is_admin) {
|
if (this.user_is_root || !this.$store.state.user_is_admin) {
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in a new issue