Skip to content
Snippets Groups Projects
Commit 2a9c04c3 authored by nicrausaz's avatar nicrausaz
Browse files

Structure resp/formateur, prtection routes

parent 318dc96c
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</template> </template>
<span>Postulations</span> <span>Postulations</span>
</v-tooltip> </v-tooltip>
<v-tooltip right> <v-tooltip right v-if="isReponsible">
<template v-slot:activator="{ on }"> <template v-slot:activator="{ on }">
<v-list-tile @click="navigateTo('/openjobs')" v-on="on"> <v-list-tile @click="navigateTo('/openjobs')" v-on="on">
<v-list-tile-action> <v-list-tile-action>
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<span>Places disponibles</span> <span>Places disponibles</span>
</v-tooltip> </v-tooltip>
<v-tooltip right> <v-tooltip right>
<template v-slot:activator="{ on }"> <template v-slot:activator="{ on }" v-if="!isReponsible">
<v-list-tile @click="navigateTo('/favourites')" v-on="on"> <v-list-tile @click="navigateTo('/favourites')" v-on="on">
<v-list-tile-action> <v-list-tile-action>
<v-icon>star</v-icon> <v-icon>star</v-icon>
...@@ -48,6 +48,9 @@ ...@@ -48,6 +48,9 @@
<script> <script>
export default { export default {
name: 'main-drawer', name: 'main-drawer',
computed: {
isReponsible () { return this.$store.state.moduleUser.userData.role === 'responsable'}
},
methods: { methods: {
navigateTo(link) { navigateTo(link) {
this.$router.push(link) this.$router.push(link)
......
...@@ -11,10 +11,18 @@ ...@@ -11,10 +11,18 @@
</v-btn> </v-btn>
</v-toolbar-items> </v-toolbar-items>
<v-toolbar-items class="hidden-sm-and-down" v-else> <v-toolbar-items class="hidden-sm-and-down" v-else>
<v-btn flat class="white--text">Nicolas Crausaz</v-btn> <v-btn
<v-btn icon class="white--text"> flat
<v-icon @click="logout">logout</v-icon> class="white--text"
</v-btn> >{{$store.state.moduleUser.userData.tequila.firstname}} {{$store.state.moduleUser.userData.tequila.name}}</v-btn>
<v-tooltip bottom>
<template v-slot:activator="{ on }">
<v-btn icon class="white--text" v-on="on">
<v-icon @click="logout">logout</v-icon>
</v-btn>
</template>
<span>Déconnexion</span>
</v-tooltip>
</v-toolbar-items> </v-toolbar-items>
</v-toolbar> </v-toolbar>
</template> </template>
......
import Vue from 'vue' import Vue from 'vue'
import Router from 'vue-router' import Router from 'vue-router'
import routes from './routes.js' import routes from './routes.js'
import store from '../store/store.js'
Vue.use(Router) Vue.use(Router)
export default new Router({routes}) const router = new Router({ routes })
router.beforeEach((to, from, next) => {
// TODO: check if token, and if expired
if (store.getters['moduleUser/userIsLogedIn']) {
//
}
// get & set user data
store.dispatch('moduleUser/getUserData').then(() => {
// Valide l'accès à la route selon le rôle
let routeLimitation = to.meta.requiresRole
let userRole = store.state.moduleUser.userData.role
if (routeLimitation == 'responsable' && userRole == 'formateur') {
// Routes limitées aux responsables
let deniedRoutes = ['/openjobs']
if (deniedRoutes.includes(to.fullPath)) {
next('/error');
}
}
if (routeLimitation == 'formateur' && userRole == 'responsable') {
// Routes limitées aux formateurs
let deniedRoutes = ['/favourites']
if (deniedRoutes.includes(to.fullPath)) {
next('/error');
}
}
next();
})
});
export default router
...@@ -14,16 +14,23 @@ const routes = [ ...@@ -14,16 +14,23 @@ const routes = [
name: 'application', name: 'application',
component: () => import('@/views/ApplicationView.vue') component: () => import('@/views/ApplicationView.vue')
}, },
{
path: '/openjobs',
name: 'openjobs',
component: () => import('@/views/OpenJobsView.vue'),
meta: { requiresRole: 'responsible' }
},
{
path: '/favourites',
name: 'favourites',
component: () => import('@/views/FavouritesView.vue'),
meta: { requiresRole: 'formateur' }
},
{ {
path: '*', path: '*',
name: 'error', name: 'error',
component: () => import('@/views/ErrorView.vue') component: () => import('@/views/ErrorView.vue'),
}, },
{
path: '/openjobs',
name: 'openjobs',
component: () => import('@/views/OpenJobsView.vue')
}
// favorites // favorites
// erreurs // erreurs
] ]
......
...@@ -10,19 +10,25 @@ export function login() { ...@@ -10,19 +10,25 @@ export function login() {
window.location = 'http://localhost:8000/api/auth/login' window.location = 'http://localhost:8000/api/auth/login'
} else { } else {
localStorage.setItem('stored_token', response.data.token); localStorage.setItem('stored_token', response.data.token);
console.log('setting token:' + response.data.token) localStorage.setItem('last_login', Date.now());
} }
}) })
} }
export function getUserData(context) { export function getUserData(context) {
axios({ return new Promise((resolve, reject) => {
method: 'get', axios({
url: '/user' method: 'get',
}) url: '/user'
.then(response => {
context.commit('setUserData', response.data)
}) })
.then(response => {
context.commit('setUserData', response.data)
resolve(response.data)
})
.catch(err => {
reject(err)
})
})
} }
export function logout() { export function logout() {
......
export function userIsLogedIn () { export function userIsLogedIn () {
// return localStorage.getItem('stored_token') != null return localStorage.getItem('stored_token') != null
return localStorage.getItem('stored_token')
} }
\ No newline at end of file
export function setUserData (state, data) { export function setUserData (state, data) {
console.log(data)
state.userData = data state.userData = data
} }
\ No newline at end of file
<template>
<div id="favourites-view">
<h1>Vos favoris</h1>
</div>
</template>
<script>
export default {
name: 'favourites-view'
}
</script>
<style>
</style>
<template> <template>
<div id="home-view"> <div id="home-view">
<h1>Accueil</h1>Accueil: statistiques <h1>Accueil</h1>
Il y a : 4 nouvelles postulations pour le métier : test depuis votre dernière connexion Accueil: statistiques
<br> Dernière connexion le: {{lastLogin}}
<button @click="$store.dispatch('moduleUser/getUserData')">get data</button>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
name: 'home-view' name: 'home-view',
computed: {
lastLogin() { return localStorage.getItem('last_login') }
}
} }
</script> </script>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment