diff --git a/src/boot/auth.ts b/src/boot/auth.ts index cb9b50d..d5a0f05 100644 --- a/src/boot/auth.ts +++ b/src/boot/auth.ts @@ -17,7 +17,7 @@ export default boot(async ({ app }) => { useStore .setUser({ id: resp.data.id, - username: resp.data.username, + user: resp.data.username, role: { role: resp.data.role, permissions: [] }, }) .catch((err) => console.error(err)); diff --git a/src/components/UserEditAllDialog.vue b/src/components/UserEditAllDialog.vue index 61116d8..56d9df3 100644 --- a/src/components/UserEditAllDialog.vue +++ b/src/components/UserEditAllDialog.vue @@ -69,6 +69,7 @@ const dialog = ref(); const form = ref(); const newUser = ref(false); const role = ref(''); + const localUser = ref({ user: '', email: '', diff --git a/src/pages/LoginPage.vue b/src/pages/LoginPage.vue index 41ccab8..502d948 100644 --- a/src/pages/LoginPage.vue +++ b/src/pages/LoginPage.vue @@ -15,7 +15,7 @@ const router = useRouter(); const userStore = useUserStore(); onMounted(() => { - if (userStore.user?.username !== '' && userStore.user?.role.role !== '') { + if (userStore.user?.user !== '' && userStore.user?.role.role !== '') { forwardToPage().catch((err) => console.error(err)); } }); diff --git a/src/vueLib/login/LoginMenu.vue b/src/vueLib/login/LoginMenu.vue index e51bdf9..0eabd7d 100644 --- a/src/vueLib/login/LoginMenu.vue +++ b/src/vueLib/login/LoginMenu.vue @@ -3,7 +3,7 @@ - {{ currentUser?.username }} + {{ currentUser?.user }} {{ loginText }} @@ -69,7 +69,7 @@ const darkMode = computed(() => { return 'dark_mode'; }); const showLogin = computed( - () => (route.path !== '/' && route.path !== '/login') || currentUser.value?.username === '', + () => (route.path !== '/' && route.path !== '/login') || currentUser.value?.user === '', ); const autorized = computed(() => !!user.isAuthorizedAs(['admin'])); diff --git a/src/vueLib/login/useLogin.ts b/src/vueLib/login/useLogin.ts index 210f5ea..f4c2cb2 100644 --- a/src/vueLib/login/useLogin.ts +++ b/src/vueLib/login/useLogin.ts @@ -35,7 +35,7 @@ export function useLogin() { await userStore .setUser({ id: resp.data.id, - username: resp.data.user, + user: resp.data.user, role: { role: resp.data.role, permissions: [] }, }) .catch((err) => NotifyResponse(err, 'error')); @@ -69,7 +69,7 @@ export function useLogin() { userStore .setUser({ id: resp.data.id, - username: resp.data.user, + user: resp.data.user, role: { role: resp.data.role, permissions: [] }, }) .catch((err) => NotifyResponse(err, 'error')); diff --git a/src/vueLib/login/userStore.ts b/src/vueLib/login/userStore.ts index e2b68dd..8f66de3 100644 --- a/src/vueLib/login/userStore.ts +++ b/src/vueLib/login/userStore.ts @@ -25,8 +25,17 @@ export const useUserStore = defineStore('user', { }; }, isPermittedTo: (state: UserState) => { - return (name: string, type: 'read' | 'write' | 'delete' | 'import' | 'export'): boolean => { + return ( + name: string, + type: 'read' | 'write' | 'delete' | 'import' | 'export', + compareRole?: Role, + ): boolean => { const permission = state.user?.permissions?.find((r: Permission) => r.name === name); + if (compareRole && permission) { + const rolePermission = compareRole.permissions?.find((r: Permission) => r.name === name); + if (rolePermission && rolePermission?.permission > permission?.permission) return false; + } + switch (type) { case 'read': return permission?.permission ? (permission.permission & (1 << 0)) === 1 : false; @@ -62,7 +71,7 @@ export const useUserStore = defineStore('user', { if (!this.user) return; if ($q) { $q?.notify({ - message: "user '" + this.user?.username + "' logged out", + message: "user '" + this.user?.user + "' logged out", color: 'orange', position: 'top', icon: 'warning', @@ -80,7 +89,7 @@ export const useUserStore = defineStore('user', { ], }); } else { - console.error("user '" + this.user?.username + "' logged out"); + console.error("user '" + this.user?.user + "' logged out"); } this.user = null; @@ -108,9 +117,12 @@ export const useUserStore = defineStore('user', { ], }); } else { - console.error("user '" + this.user?.username + "' logged out"); + console.error("user '" + this.user?.user + "' logged out"); } }); }, + isAdmin() { + return this.user?.role.role.includes('admin'); + }, }, });