Admin navigation permissions
This commit is contained in:
32
ui/src/composables/useAuth.ts
Normal file
32
ui/src/composables/useAuth.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
import { useUserStore } from "@/stores/user"
|
||||
import { computed } from "vue";
|
||||
import { Role } from "@shared/types/roles"
|
||||
|
||||
export function useAuth() {
|
||||
const userStore = useUserStore();
|
||||
|
||||
const roles = computed<string[]>(() => {
|
||||
return userStore.user?.roleData?.map((r: Role) => r.name) ?? [];
|
||||
});
|
||||
|
||||
function isDev() {
|
||||
return roles.value.includes('Dev');
|
||||
}
|
||||
|
||||
function hasRole(roleName: string): boolean {
|
||||
if (isDev()) return true;
|
||||
return roles.value.includes(roleName);
|
||||
}
|
||||
|
||||
function hasAnyRole(roleNames: string[]): boolean {
|
||||
if (isDev()) return true;
|
||||
return roles.value.some(name => roleNames.includes(name))
|
||||
}
|
||||
|
||||
function hasAllRoles(roleNames: string[]): boolean {
|
||||
if (isDev()) return true;
|
||||
return roles.value.every(name => roleNames.includes(name))
|
||||
}
|
||||
|
||||
return { hasRole, hasAnyRole, hasAllRoles }
|
||||
}
|
||||
Reference in New Issue
Block a user