feat : creation d'une page d'aministration pour la ajout / modification d'utlisateur
This commit is contained in:
@@ -24,10 +24,7 @@
|
|||||||
id="user-role"
|
id="user-role"
|
||||||
v-model="form.role"
|
v-model="form.role"
|
||||||
label="Rôle de l'utilisateur"
|
label="Rôle de l'utilisateur"
|
||||||
:options="[
|
:options="ROLE"
|
||||||
{ value: ROLE.ROLE_USER, label: 'User' },
|
|
||||||
{ value: ROLE.ROLE_ADMIN, label: 'Admin' },
|
|
||||||
]"
|
|
||||||
/>
|
/>
|
||||||
<UiTextInput
|
<UiTextInput
|
||||||
id="user-password"
|
id="user-password"
|
||||||
@@ -46,7 +43,7 @@
|
|||||||
import {computed, reactive, ref, watch} from 'vue'
|
import {computed, reactive, ref, watch} from 'vue'
|
||||||
import {ROLE} from '~/utils/constants'
|
import {ROLE} from '~/utils/constants'
|
||||||
import {createUser, updateUser, getUser} from '~/services/auth'
|
import {createUser, updateUser, getUser} from '~/services/auth'
|
||||||
import type {UserData} from '~/services/dto/user-data'
|
import type {UserData, UserFormData} from '~/services/dto/user-data'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@@ -63,10 +60,11 @@ const resolveUserId = (param: unknown) => {
|
|||||||
return Number.isFinite(id) ? id : null
|
return Number.isFinite(id) ? id : null
|
||||||
}
|
}
|
||||||
|
|
||||||
const form = reactive({
|
|
||||||
|
const form = reactive<UserFormData>({
|
||||||
username: '',
|
username: '',
|
||||||
role: '',
|
password: '',
|
||||||
password: ''
|
role: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
const hydrateFromUser = (user: UserData | null) => {
|
const hydrateFromUser = (user: UserData | null) => {
|
||||||
@@ -76,8 +74,8 @@ const hydrateFromUser = (user: UserData | null) => {
|
|||||||
isHydrating.value = true
|
isHydrating.value = true
|
||||||
form.username = user.username ?? ''
|
form.username = user.username ?? ''
|
||||||
const roles = user.roles ?? []
|
const roles = user.roles ?? []
|
||||||
const hasAdmin = roles.includes(ROLE.ROLE_ADMIN)
|
const hasAdmin = roles.includes("ROLE_ADMIN")
|
||||||
form.role = hasAdmin ? ROLE.ROLE_ADMIN : ROLE.ROLE_USER
|
form.role = hasAdmin ? "ROLE_ADMIN" : "ROLE_USER"
|
||||||
form.password = ''
|
form.password = ''
|
||||||
isHydrating.value = false
|
isHydrating.value = false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,10 +33,7 @@
|
|||||||
<NuxtLink to="/admin/carrier/carrier-list">
|
<NuxtLink to="/admin/carrier/carrier-list">
|
||||||
Transporteur
|
Transporteur
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
<NuxtLink
|
<NuxtLink to="/admin/user/list">
|
||||||
to="/admin/user/list"
|
|
||||||
class="block px-4 py-2 rounded hover:bg-primary-600 transition"
|
|
||||||
>
|
|
||||||
Utilisateurs
|
Utilisateurs
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ definePageMeta({
|
|||||||
})
|
})
|
||||||
|
|
||||||
import type {UserData} from "~/services/dto/user-data";
|
import type {UserData} from "~/services/dto/user-data";
|
||||||
import {getUsers} from "~/services/auth";
|
import {getAdminUsers, getUsers} from "~/services/auth";
|
||||||
|
|
||||||
const userList = ref<UserData[]>([])
|
const userList = ref<UserData[]>([])
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
@@ -52,6 +52,6 @@ const goToUser = (id: number) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
userList.value = await getUsers()
|
userList.value = await getAdminUsers()
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -13,6 +13,17 @@ export async function getUsers() {
|
|||||||
|
|
||||||
return data['hydra:member'] ?? []
|
return data['hydra:member'] ?? []
|
||||||
}
|
}
|
||||||
|
export async function getAdminUsers() {
|
||||||
|
const api = useApi()
|
||||||
|
const data = await api.get<UserData[] | { 'hydra:member': UserData[] }>('admin/users', {}, {
|
||||||
|
toastErrorKey: 'errors.auth.users'
|
||||||
|
})
|
||||||
|
if (Array.isArray(data)) {
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
return data['hydra:member'] ?? []
|
||||||
|
}
|
||||||
|
|
||||||
export async function getUser(id: number) {
|
export async function getUser(id: number) {
|
||||||
const api = useApi()
|
const api = useApi()
|
||||||
|
|||||||
@@ -9,3 +9,9 @@ export type UserPayload = {
|
|||||||
password?: string
|
password?: string
|
||||||
roles?: string[]
|
roles?: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type UserFormData = {
|
||||||
|
username: string
|
||||||
|
password: string
|
||||||
|
role: string
|
||||||
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export const useAuthStore = defineStore('auth', {
|
|||||||
}),
|
}),
|
||||||
getters: {
|
getters: {
|
||||||
isAuthenticated: (state) => Boolean(state.user),
|
isAuthenticated: (state) => Boolean(state.user),
|
||||||
isAdmin: (state) => Boolean(state.user?.roles?.includes(ROLE.ROLE_ADMIN))
|
isAdmin: (state) => Boolean(state.user?.roles?.includes(ROLE[0].value))
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
clearSession() {
|
clearSession() {
|
||||||
|
|||||||
@@ -8,10 +8,10 @@ export const MERCHANDISE_TYPE_CODES = {
|
|||||||
AUTRES: 'AUTRES'
|
AUTRES: 'AUTRES'
|
||||||
} as const
|
} as const
|
||||||
|
|
||||||
export const ROLE = {
|
export const ROLE = [
|
||||||
ROLE_ADMIN : 'ROLE_ADMIN',
|
{ label: 'Administrateur', value: 'ROLE_ADMIN' },
|
||||||
ROLE_USER : 'ROLE_USER'
|
{ label: 'Utilisateur', value: 'ROLE_USER' }
|
||||||
}
|
]
|
||||||
export const SUPLLIER_CODE = {
|
export const SUPLLIER_CODE = {
|
||||||
LIOT: 'LIOT'
|
LIOT: 'LIOT'
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user