jcloud/dashboard/src2/data/session.js
2025-04-12 17:39:38 +08:00

111 lines
2.9 KiB
JavaScript

import { computed, reactive } from 'vue';
import { createResource } from 'jingrow-ui';
import { clear } from 'idb-keyval';
import router from '../router';
export let session = reactive({
login: createResource({
url: 'login',
makeParams({ email, password }) {
return {
usr: email,
pwd: password
};
}
}),
logout: createResource({
url: 'logout',
async onSuccess() {
session.user = getSessionUser();
await router.replace({ name: 'Login' });
localStorage.removeItem('current_team');
// On logout, reset posthog user identity and device id
if (window.posthog?.__loaded) {
posthog.reset(true);
}
// clear all cache from the session
clear();
window.location.reload();
}
}),
logoutWithoutReload: createResource({
url: 'logout',
async onSuccess() {
session.user = getSessionUser();
localStorage.removeItem('current_team');
// On logout, reset posthog user identity and device id
if (window.posthog?.__loaded) {
posthog.reset(true);
}
clear();
}
}),
roles: createResource({
url: 'jcloud.api.account.get_permission_roles',
cache: ['roles', localStorage.getItem('current_team')],
initialData: []
}),
isTeamAdmin: computed(
() =>
session.roles.data.length
? session.roles.data.some(role => role.admin_access)
: false // if no roles, assume not admin and has member access
),
hasBillingAccess: computed(() =>
session.roles.data.length
? session.roles.data.some(role => role.allow_billing)
: true
),
hasWebhookConfigurationAccess: computed(() =>
session.roles.data.length
? session.roles.data.some(role => role.allow_webhook_configuration)
: true
),
hasAppsAccess: computed(() =>
session.roles.data.length
? session.roles.data.some(role => role.allow_apps)
: true
),
hasPartnerAccess: computed(() =>
session.roles.data.length
? session.roles.data.some(role => role.allow_partner)
: true
),
hasSiteCreationAccess: computed(() =>
session.roles.data.length
? session.roles.data.some(role => role.allow_site_creation)
: true
),
hasBenchCreationAccess: computed(() =>
session.roles.data.length
? session.roles.data.some(role => role.allow_bench_creation)
: true
),
hasServerCreationAccess: computed(() =>
session.roles.data.length
? session.roles.data.some(role => role.allow_server_creation)
: true
),
user: getSessionUser(),
isLoggedIn: computed(() => !!session.user),
isSystemUser: getSessionCookies().get('system_user') === 'yes'
});
export default session;
export function getSessionUser() {
let cookies = getSessionCookies();
let sessionUser = cookies.get('user_id');
if (!sessionUser || sessionUser === 'Guest') {
sessionUser = null;
}
return sessionUser;
}
function getSessionCookies() {
return new URLSearchParams(document.cookie.split('; ').join('&'));
}