More auth / role checks for navlinks

This commit is contained in:
2024-05-23 09:55:02 -04:00
parent c03ad48615
commit b0d6ec877b
4 changed files with 58 additions and 24 deletions

View File

@@ -1,25 +1,35 @@
import { defineStore } from 'pinia';
import { ID, account, functions, teams } from 'boot/appwrite';
import { ExecutionMethod, OAuthProvider, type Models } from 'appwrite';
import { ref } from 'vue';
import { computed, ref } from 'vue';
export const useAuthStore = defineStore('auth', () => {
const currentUser = ref<Models.User<Models.Preferences> | null>(null);
const currentUserTeams = ref<Models.TeamList<Models.Preferences> | null>(
null
);
const userNames = ref<Record<string, string>>({});
async function init() {
try {
currentUser.value = await account.get();
currentUserTeams.value = await teams.list();
} catch {
currentUser.value = null;
currentUserTeams.value = null;
}
}
const hasRequiredRole = async (requiredRoles: string[]): Promise<boolean> => {
const userTeams = await teams.list();
const userTeamNames = userTeams.teams.map((team) => team.name);
console.log(requiredRoles.some((role) => userTeamNames.includes(role)));
return requiredRoles.some((role) => userTeamNames.includes(role));
const currentUserTeamNames = computed(() =>
currentUserTeams.value
? currentUserTeams.value.teams.map((team) => team.name)
: []
);
const hasRequiredRole = (requiredRoles: string[]): boolean => {
return requiredRoles.some((role) =>
currentUserTeamNames.value.includes(role)
);
};
async function register(email: string, password: string) {
@@ -28,8 +38,9 @@ export const useAuthStore = defineStore('auth', () => {
}
async function login(email: string, password: string) {
await account.createEmailPasswordSession(email, password);
currentUser.value = await account.get();
init();
}
async function googleLogin() {
account.createOAuth2Session(
OAuthProvider.Google,