multi tenancy stuff

This commit is contained in:
m5r
2021-08-06 01:07:15 +08:00
parent b54f9ef43c
commit d20eeb0617
51 changed files with 907 additions and 2542 deletions

View File

@ -1,6 +1,6 @@
import { resolver, SecurePassword, AuthenticationError } from "blitz";
import db, { Role } from "../../../db";
import db, { GlobalRole } from "../../../db";
import { Login } from "../validations";
export const authenticateUser = async (rawEmail: string, rawPassword: string) => {
@ -25,7 +25,13 @@ export default resolver.pipe(resolver.zod(Login), async ({ email, password }, ct
// This throws an error if credentials are invalid
const user = await authenticateUser(email, password);
await ctx.session.$create({ userId: user.id, role: user.role as Role });
const hasCompletedOnboarding = undefined; // TODO
await ctx.session.$create({
userId: user.id,
roles: [user.role],
hasCompletedOnboarding,
orgId: "user.memberships[0].organizationId",
});
return user;
});

View File

@ -1,18 +1,35 @@
import { resolver, SecurePassword } from "blitz";
import db, { Role } from "../../../db";
import db, { GlobalRole, MembershipRole } from "../../../db";
import { Signup } from "../validations";
import { computeEncryptionKey } from "../../../db/_encryption";
export default resolver.pipe(resolver.zod(Signup), async ({ email, password }, ctx) => {
const hashedPassword = await SecurePassword.hash(password.trim());
const encryptionKey = computeEncryptionKey(email.toLowerCase().trim()).toString("hex");
const user = await db.user.create({
data: { email: email.toLowerCase().trim(), hashedPassword, role: Role.USER },
select: { id: true, name: true, email: true, role: true },
data: {
email: email.toLowerCase().trim(),
hashedPassword,
role: GlobalRole.CUSTOMER,
memberships: {
create: {
role: MembershipRole.OWNER,
organization: {
create: {
encryptionKey,
},
},
},
},
},
include: { memberships: true },
});
const encryptionKey = computeEncryptionKey(user.id).toString("hex");
await db.customer.create({ data: { id: user.id, encryptionKey } });
await ctx.session.$create({ userId: user.id, role: user.role });
await ctx.session.$create({
userId: user.id,
roles: [user.role, user.memberships[0]!.role],
orgId: user.memberships[0]!.organizationId,
});
return user;
});