- Story 1.1: Permission enum, config, AuthorizesPermissions & HasWorkspaceScope traits, member→worker migration - Story 1.2: Team page with member list, invitation system with queued email - Story 1.3: Role assignment (Manager/Worker) and member removal with activity logging - Story 1.4: Owner-only permission toggle matrix for Managers (manage team, view logs, configure portal) - Story 1.5: Role-based access enforcement — Workers see only assigned declarations/clients, sidebar scoping - Story 1.6: Workspace switcher dropdown for multi-workspace users with session-based switching - 83 new/modified files, 182 tests passing with zero regressions Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
55 lines
1.5 KiB
Vue
55 lines
1.5 KiB
Vue
<script setup lang="ts">
|
|
import { Link, router } from '@inertiajs/vue3';
|
|
import { LogOut, Settings } from 'lucide-vue-next';
|
|
import {
|
|
DropdownMenuGroup,
|
|
DropdownMenuItem,
|
|
DropdownMenuLabel,
|
|
DropdownMenuSeparator,
|
|
} from '@/components/ui/dropdown-menu';
|
|
import UserInfo from '@/components/UserInfo.vue';
|
|
import { logout } from '@/routes';
|
|
import { edit } from '@/routes/profile';
|
|
import type { User } from '@/types';
|
|
|
|
type Props = {
|
|
user: User;
|
|
};
|
|
|
|
const handleLogout = () => {
|
|
router.flushAll();
|
|
};
|
|
|
|
defineProps<Props>();
|
|
</script>
|
|
|
|
<template>
|
|
<DropdownMenuLabel class="p-0 font-normal">
|
|
<div class="flex items-center gap-2 px-1 py-1.5 text-left text-sm">
|
|
<UserInfo :user="user" :show-email="true" />
|
|
</div>
|
|
</DropdownMenuLabel>
|
|
<DropdownMenuSeparator />
|
|
<DropdownMenuGroup>
|
|
<DropdownMenuItem :as-child="true">
|
|
<Link class="block w-full cursor-pointer" :href="edit()" prefetch>
|
|
<Settings class="mr-2 h-4 w-4" />
|
|
Settings
|
|
</Link>
|
|
</DropdownMenuItem>
|
|
</DropdownMenuGroup>
|
|
<DropdownMenuSeparator />
|
|
<DropdownMenuItem :as-child="true">
|
|
<Link
|
|
class="block w-full cursor-pointer"
|
|
:href="logout()"
|
|
@click="handleLogout"
|
|
as="button"
|
|
data-test="logout-button"
|
|
>
|
|
<LogOut class="mr-2 h-4 w-4" />
|
|
Log out
|
|
</Link>
|
|
</DropdownMenuItem>
|
|
</template>
|