| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import Vue from 'vue'
- import { resetRouter } from '@/router'
- import { Role } from '@/constant'
- const state = {
- token: '',
- name: '',
- avatar: '',
- roles: null,
- access: null
- }
- const mutations = {
- SET_TOKEN (state, token) {
- state.token = token
- },
- SET_NAME (state, name) {
- state.name = name
- },
- SET_AVATAR (state, avatar) {
- state.avatar = avatar
- },
- SET_ROLES (state, roles) {
- state.roles = roles
- },
- SET_ACCESSES (state, accesses) {
- state.accesses = accesses
- }
- }
- function parseRealmAccess (realmAccess) {
- const roleSet = new Set()
- if (realmAccess) {
- const roleArray = Object.values(Role)
- realmAccess.roles.forEach(role => {
- if (roleArray.includes(role)) {
- roleSet.add(role)
- }
- })
- }
- if (!roleSet.size) {
- roleSet.add(Role.VISITOR)
- }
- return roleSet
- }
- function parseResourceAccess (resourceAccess) {
- const accessSet = new Set()
- if (resourceAccess) {
- Object.keys(resourceAccess).forEach(client => {
- resourceAccess[client].roles.forEach(role => {
- accessSet.add(`${client}:${role}`)
- })
- })
- }
- return accessSet
- }
- const actions = {
- login ({ commit }, keycloak) {
- if (keycloak.authenticated) {
- const { preferred_username, family_name, given_name, avatar } = keycloak.tokenParsed
- commit('SET_TOKEN', keycloak.token)
- commit('SET_ROLES', parseRealmAccess(keycloak.realmAccess))
- commit('SET_ACCESSES', parseResourceAccess(keycloak.resourceAccess))
- commit('SET_NAME', family_name && given_name ? `${family_name}${/[a-zA-z]/.test(family_name) ? ' ' : ''}${given_name}` : preferred_username)
- commit('SET_AVATAR', avatar)
- }
- },
- logout ({ dispatch }) {
- // 登出将跳转页面,所以不需其他操作
- Vue.prototype.$keycloak.logout()
- dispatch('clearToken')
- },
- clearToken ({ commit }) {
- commit('SET_TOKEN', '')
- Vue.prototype.$keycloak.refreshToken = null
- resetRouter()
- }
- }
- export default {
- namespaced: true,
- state,
- mutations,
- actions
- }
|