71 lines
2.2 KiB
JavaScript
71 lines
2.2 KiB
JavaScript
import { getStore, getProvider } from './store.js';
|
|
|
|
export async function resolveCompanyAccess(googleAuthId, companyId) {
|
|
const provider = await getProvider();
|
|
const access = await provider.query(
|
|
`SELECT company_id, role FROM companyuser WHERE company_id = @companyId AND google_auth_id = @googleAuthId`,
|
|
{ companyId, googleAuthId }
|
|
);
|
|
const accessRow = access.rows[0] ?? null;
|
|
if (!accessRow) {
|
|
const exists = await provider.query(
|
|
`SELECT id FROM company WHERE id = @companyId`,
|
|
{ companyId }
|
|
);
|
|
if (!exists.rows[0]) {
|
|
throw new Error('Company not found');
|
|
}
|
|
throw new Error('Not authorized');
|
|
}
|
|
return {
|
|
companyId: accessRow.company_id,
|
|
role: accessRow.role ?? 'user',
|
|
};
|
|
}
|
|
|
|
export async function resolveSelectedCompanyAccess(googleAuthId) {
|
|
const store = await getStore();
|
|
const user = await store.google_auth.getById(googleAuthId);
|
|
const companyId = user?.selectedCompanyId ?? null;
|
|
if (companyId == null) {
|
|
throw new Error('No company selected');
|
|
}
|
|
return resolveCompanyAccess(googleAuthId, companyId);
|
|
}
|
|
|
|
export async function requireCompanyAdmin(googleAuthId, companyId) {
|
|
const ctx = await resolveCompanyAccess(googleAuthId, companyId);
|
|
if (ctx.role !== 'admin') {
|
|
throw new Error('Not authorized');
|
|
}
|
|
return ctx;
|
|
}
|
|
|
|
export async function requireSelectedCompanyAdmin(googleAuthId) {
|
|
const ctx = await resolveSelectedCompanyAccess(googleAuthId);
|
|
if (ctx.role !== 'admin') {
|
|
throw new Error('Not authorized');
|
|
}
|
|
return ctx;
|
|
}
|
|
|
|
export async function list(googleAuthId) {
|
|
const store = await getStore();
|
|
return store.companyuser.list(googleAuthId);
|
|
}
|
|
|
|
export async function addByEmail(googleAuthId, data) {
|
|
const store = await getStore();
|
|
return store.companyuser.addByEmail(googleAuthId, data);
|
|
}
|
|
|
|
export async function setRole(googleAuthId, id, role) {
|
|
const store = await getStore();
|
|
return store.companyuser.setRole(googleAuthId, id, role);
|
|
}
|
|
|
|
export async function remove(googleAuthId, id) {
|
|
const store = await getStore();
|
|
return store.companyuser.remove(googleAuthId, id);
|
|
}
|