优化闭站或者必须登录才能访问等情况的控制

dev
truthhun 1 year ago
parent 54cf46ee94
commit 4c599781f0

@ -1,5 +1,5 @@
<template>
<el-container class="layout-default">
<el-container class="layout-default" v-loading="loading">
<el-header v-if="$route.name !== 'search' || isMobile">
<div>
<el-menu
@ -367,7 +367,7 @@ import { mapGetters, mapActions } from 'vuex'
import UserAvatar from '~/components/UserAvatar.vue'
import FormUserinfo from '~/components/FormUserinfo.vue'
import { listFriendlink } from '~/api/friendlink'
import { categoryToTrees } from '~/utils/utils'
import { categoryToTrees, requireLogin } from '~/utils/utils'
import { getSignedToday, signToday } from '~/api/user'
export default {
components: { UserAvatar, FormUserinfo },
@ -384,6 +384,7 @@ export default {
menuDrawerVisible: false,
sign: { id: 0 },
activeCollapse: 'categories',
loading: false,
}
},
head() {
@ -403,12 +404,13 @@ export default {
}
},
computed: {
...mapGetters('user', ['user', 'token', 'allowPages']),
...mapGetters('user', ['user', 'token', 'allowPages', 'permissions']),
...mapGetters('setting', ['settings']),
...mapGetters('category', ['categories']),
...mapGetters('device', ['isMobile']),
},
async created() {
this.loading = true
const [res] = await Promise.all([
listFriendlink({
enable: true,
@ -417,6 +419,7 @@ export default {
this.getCategories(),
this.getSettings(),
])
if (res.status === 200) {
this.friendlinks = res.data.friendlink
}
@ -424,6 +427,11 @@ export default {
(item) => item.enable
)
this.loopUpdate()
this.loading = false
if (requireLogin(this.settings, this.user, this.$route, this.permissions)) {
this.$router.push('/login')
return
}
},
mounted() {
this.handleResize()

@ -1,33 +1,9 @@
import { requireLogin } from '~/utils/utils'
export default function ({ store, route, redirect }) {
const settings = store.getters['setting/settings']
const user = store.getters['user/user']
const permissions = store.getters['user/permissions'] || []
if (settings.security && settings.security.login_required && !user.id) {
// 未登录,且开启了登录访问限制
if (
!(
route.name === 'login' ||
route.name === 'register' ||
route.name === 'findpassword'
)
) {
redirect('/login')
return
}
}
if (settings.security && settings.security.is_close) {
// 1. 用户未登录,跳转到登录页面
if (user.id === 0 && route.name !== 'login') {
redirect('/login')
return
}
// 用户已登录,如果不是管理员
if (user.id !== 0 && permissions.length === 0 && route.name !== 'login') {
redirect('/login')
return
}
if (requireLogin(settings, user, route, permissions)) {
return redirect('/login')
}
}

@ -545,7 +545,7 @@ export default {
return breadcrumb
})
let length= tmpBreadcrumbs.length
let length = tmpBreadcrumbs.length
for (let j = 0; j < length; j++) {
for (let i = 0; i < tmpBreadcrumbs.length; i++) {
let breadcrumb = tmpBreadcrumbs[i]
@ -927,7 +927,7 @@ export default {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 60px;
max-width: 90px;
display: inline-block;
}
}

@ -202,3 +202,32 @@ export function parseQueryBoolArray(query, keys) {
})
return result
}
// 是否需要登录。针对关闭站点访问、或登录访问限制
export function requireLogin(settings, user, route, permissions = []) {
if (settings.security && settings.security.login_required && !user.id) {
// 未登录,且开启了登录访问限制
if (
!(
route.name === 'login' ||
route.name === 'register' ||
route.name === 'findpassword'
)
) {
return true
}
}
if (settings.security && settings.security.is_close) {
// 1. 用户未登录,跳转到登录页面
if (user.id === 0 && route.name !== 'login') {
return true
}
// 用户已登录,如果不是管理员
if (user.id !== 0 && permissions.length === 0 && route.name !== 'login') {
return true
}
}
return false
}

Loading…
Cancel
Save