diff --git a/src/boot/login.ts b/src/boot/login.ts index 94c8b49..8ca4d1c 100644 --- a/src/boot/login.ts +++ b/src/boot/login.ts @@ -6,19 +6,21 @@ import { StateInterface } from 'src/store'; export default boot>(({ router, store }) => { router.beforeEach((to, from, next) => { store.dispatch('user/loadFromLocalStorage').then(() => { - const permissions = store.getters['user/permissions']; - console.log('login_boot', permissions); + const user: User = store.getters['user/user']; + let permissions: string[] = []; + user.roles.forEach(role => { + permissions = permissions.concat(role.permissions) + }); + if ( to.matched.some((record: RouteRecord) => { // permissions is set AND has NO matching permission return ( - permissions in record.meta && - !( - ( - record.meta.permissions.filter((value: string) => - permissions.includes(value) - ).length > 0 - ) + "permissions" in record.meta && + ( + record.meta.permissions.filter((value: string) => + permissions.includes(value) + ).length == 0 ) ); }) diff --git a/src/flaschengeist.d.ts b/src/flaschengeist.d.ts index a9b081c..d3ff9d4 100644 --- a/src/flaschengeist.d.ts +++ b/src/flaschengeist.d.ts @@ -1,31 +1,51 @@ -interface Session { - user: User; - expires: Date; - token: string; - lifetime: number; - browser: string; - platform: string; -} -interface User { - roles: Array; - userid: string; - display_name: string; - firstname: string; - lastname: string; - mail: string; -} -interface Permission { - id: number; - name: string; -} -interface Role { - permissions: Array; - id: number; - name: string; -} -interface UserAttribute { - id: number; - user: number; - name: string; - value: string; +declare namespace FG { + interface Event { + id: number; + begin: Date; + end?: Date; + description: string; + kind: EventKind; + slots: Array; + } + interface EventKind { + id: number; + name: string; + } + interface EventSlot { + id: number; + start: Date; + end?: any; + slots: Array; + } + interface Job { + userid: string; + value: number; + } + type JobKind = string; + interface JobSlot { + id: number; + needed_persons: number; + kind: JobKind; + jobs: Array; + } + interface User { + userid: string; + display_name: string; + firstname: string; + lastname: string; + mail: string; + roles: Array; + } + interface Session { + expires: Date; + token: string; + lifetime: number; + browser: string; + platform: string; + } + type Permission = string; + interface Role { + name: string; + permissions: Array; + } } diff --git a/src/plugins/user/pages/User.vue b/src/plugins/user/pages/User.vue index 55eb717..2232c4c 100644 --- a/src/plugins/user/pages/User.vue +++ b/src/plugins/user/pages/User.vue @@ -10,17 +10,17 @@ height="" > - Name: {{ userSession.user.firstname }} {{ userSession.user.lastname }}
- E-Mail: {{ userSession.user.mail }}
+ Name: {{ userObj.firstname }} {{ userObj.lastname }}
+ E-Mail: {{ userObj.mail }}
Roles:
  • {{ role }}

- Token expires: {{ userSession.expires }} + Token expires: {{ sessionObj.expires }}
@@ -36,16 +36,16 @@ import { mainLink } from '../plugin'; export default defineComponent({ // name: 'PageName' setup(_, { root }) { - const userPermissions = computed( - () => root.$store.getters['user/permissions'] + const userObj = computed( + () => root.$store.getters['user/user'] ); - const userSession = computed( + const sessionObj = computed( () => root.$store.getters['user/session'] ); const checkMain = computed(() => { return mainLink.name == root.$route.name; }); - return { userPermissions, userSession, checkMain }; + return { userObj, sessionObj, checkMain }; } }); diff --git a/src/plugins/user/store/user.ts b/src/plugins/user/store/user.ts index 40dd2e0..c6f6b43 100644 --- a/src/plugins/user/store/user.ts +++ b/src/plugins/user/store/user.ts @@ -11,57 +11,56 @@ export interface UserStateInterface extends LoginResponse { } export interface LoginResponse { - permissions: string[]; - session: Session; + user: FG.User; + session: FG.Session; } const state: UserStateInterface = { - permissions: [], + user: { + display_name: '', + firstname: '', + lastname: '', + mail: '', + roles: [], + userid: '' + }, session: { browser: '', expires: new Date(), lifetime: -1, platform: '', - token: '', - user: { - display_name: '', - firstname: '', - lastname: '', - mail: '', - roles: [], - userid: '' - } + token: '' }, loginLoading: false }; const mutations: MutationTree = { - setPermissions(state, data: []) { - state.permissions = data; + setUser (state, data: FG.User) { + state.user = data; }, - setSession(state, data: Session) { + setSession (state, data: FG.Session) { state.session = data; }, - setLoginLoading(state, data: boolean) { + setLoginLoading (state, data: boolean) { state.loginLoading = data; }, - showState(state) { + showState (state) { console.log(state); } }; const actions: ActionTree = { - login({ commit }, data: LoginData) { + login ({ commit }, data: LoginData) { commit('setLoginLoading', true); Loading.show({ message: 'Du wirst eingeloggt' }); void axios .post('/auth', data) .then((response: AxiosResponse) => { - commit('setPermissions', response.data.permissions); + commit('setUser', response.data.user); console.log('saved permisisons'); commit('setSession', response.data.session); commit('showState'); - LocalStorage.set('permissions', response.data.permissions); + LocalStorage.set('user', response.data.user); LocalStorage.set('session', response.data.session); void Router.push({ name: 'user' }); @@ -74,10 +73,17 @@ const actions: ActionTree = { Loading.hide(); }); }, - logout({ commit }, token) { + logout ({ commit }, token) { void axios.delete(`/auth/${token}`).then(() => { - commit('setPermissions', []); - commit('setToken', { + commit('setUser', { + display_name: '', + firstname: '', + lastname: '', + mail: '', + roles: [], + userid: '' + }); + commit('setSession', { browser: '', expires: '', lifetime: '', @@ -86,39 +92,46 @@ const actions: ActionTree = { }); }); }, - loadFromLocalStorage({ commit }) { + loadFromLocalStorage ({ commit }) { console.log('load from store'); - let data = LocalStorage.getItem('permissions'); - commit('setPermissions', data ? data : []); + let data = LocalStorage.getItem('user'); + commit('setUser', data ? data : { + display_name: '', + firstname: '', + lastname: '', + mail: '', + roles: [], + userid: '' + }); data = LocalStorage.getItem('session'); commit( 'setSession', data ? data : { - browser: '', - expires: new Date(), - lifetime: -1, - platform: '', - token: '' - } + browser: '', + expires: new Date(), + lifetime: -1, + platform: '', + token: '' + } ); commit('showState'); } }; const getters: GetterTree = { - permissions({ permissions }) { - return permissions; + user ({ user }) { + return user; }, - session({ session }) { + displayName ({ user }) { + return user.display_name; + }, + session ({ session }) { return session; }, - loginLoading({ loginLoading }) { + loginLoading ({ loginLoading }) { return loginLoading; - }, - displayName({ session: { user } }) { - return `${user.firstname} ${user.lastname}`; } };