ilk
This commit is contained in:
117
ui/src/stores/authStore.js
Normal file
117
ui/src/stores/authStore.js
Normal file
@@ -0,0 +1,117 @@
|
||||
// src/stores/authStore.js
|
||||
import { defineStore } from 'pinia'
|
||||
import api from 'src/services/api'
|
||||
import { usePermissionStore } from 'stores/permissionStore'
|
||||
|
||||
export const useAuthStore = defineStore('auth', {
|
||||
state: () => {
|
||||
let user = null
|
||||
|
||||
try {
|
||||
const raw = localStorage.getItem('user')
|
||||
if (raw && raw !== 'undefined' && raw !== 'null') {
|
||||
user = JSON.parse(raw)
|
||||
}
|
||||
} catch {
|
||||
console.warn('⚠️ Invalid user in localStorage, cleared')
|
||||
localStorage.removeItem('user')
|
||||
}
|
||||
|
||||
return {
|
||||
token: localStorage.getItem('token'),
|
||||
user,
|
||||
forcePasswordChange: localStorage.getItem('forcePasswordChange') === '1'
|
||||
}
|
||||
},
|
||||
|
||||
getters: {
|
||||
isAuthenticated: s => !!s.token,
|
||||
mustChangePassword: s => !!s.forcePasswordChange,
|
||||
|
||||
// 🔥 TEK ADMIN KURALI
|
||||
isAdmin: s =>
|
||||
String(s.user?.role_code || '').toLowerCase() === 'admin'
|
||||
},
|
||||
|
||||
actions: {
|
||||
/* =========================================================
|
||||
🔐 SESSION
|
||||
========================================================= */
|
||||
setSession ({ token, user }) {
|
||||
this.token = token
|
||||
this.user = user ?? null
|
||||
this.forcePasswordChange = !!user?.force_password_change
|
||||
|
||||
localStorage.setItem('token', token)
|
||||
|
||||
if (user) {
|
||||
localStorage.setItem('user', JSON.stringify(user))
|
||||
} else {
|
||||
localStorage.removeItem('user')
|
||||
}
|
||||
|
||||
localStorage.setItem(
|
||||
'forcePasswordChange',
|
||||
this.forcePasswordChange ? '1' : '0'
|
||||
)
|
||||
},
|
||||
|
||||
clearSession () {
|
||||
this.token = null
|
||||
this.user = null
|
||||
this.forcePasswordChange = false
|
||||
|
||||
localStorage.removeItem('token')
|
||||
localStorage.removeItem('user')
|
||||
localStorage.removeItem('forcePasswordChange')
|
||||
|
||||
usePermissionStore().clear()
|
||||
},
|
||||
|
||||
/* =========================================================
|
||||
🔐 LOGIN
|
||||
========================================================= */
|
||||
async login (username, password) {
|
||||
const res = await api.post('/auth/login', { username, password })
|
||||
|
||||
const token =
|
||||
res?.token ||
|
||||
res?.data?.token ||
|
||||
res?.access_token ||
|
||||
res?.data?.access_token
|
||||
|
||||
const user =
|
||||
res?.user ||
|
||||
res?.data?.user
|
||||
|
||||
// ✅ JWT doğrulama
|
||||
const tokenStr = typeof token === 'string' ? token.trim() : ''
|
||||
const looksLikeJwt = tokenStr.split('.').length === 3
|
||||
|
||||
if (!tokenStr || !looksLikeJwt) {
|
||||
console.error('❌ LOGIN RESPONSE (unexpected):', res)
|
||||
throw new Error('Invalid login token')
|
||||
}
|
||||
|
||||
this.setSession({ token: tokenStr, user })
|
||||
|
||||
// 🔥 PERMISSIONS
|
||||
const perm = usePermissionStore()
|
||||
await perm.fetchPermissions()
|
||||
|
||||
|
||||
|
||||
|
||||
// 🧪 DEBUG (istersen sonra kaldır)
|
||||
console.log('🔐 AUTH DEBUG', {
|
||||
isAdmin: this.isAdmin,
|
||||
users: perm.hasPermission('/api/users/list'),
|
||||
orders: perm.hasPermission('/api/orders/list'),
|
||||
logs: perm.hasPermission('/api/activity-logs'),
|
||||
permissions: perm.hasPermission('/api/permissions/matrix')
|
||||
})
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
})
|
||||
Reference in New Issue
Block a user