Skip to content

Commit c91cf8a

Browse files
committed
add owner to Space, fix "create" policy for SpaceUser
1 parent 1e79f40 commit c91cf8a

25 files changed

+177
-352
lines changed

next.config.js

+5-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,11 @@ const nextConfig = {
33
reactStrictMode: true,
44
swcMinify: true,
55
images: {
6-
domains: ['picsum.photos', 'lh3.googleusercontent.com', 'avatars.githubusercontent.com'],
6+
remotePatterns: [
7+
{ hostname: 'picsum.photos' },
8+
{ hostname: 'lh3.googleusercontent.com' },
9+
{ hostname: 'avatars.githubusercontent.com' },
10+
],
711
},
812
};
913

package-lock.json

+116-320
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@
2121
"dependencies": {
2222
"@heroicons/react": "^2.0.12",
2323
"@next-auth/prisma-adapter": "^1.0.5",
24-
"@prisma/client": "^5.20.0",
24+
"@prisma/client": "^6.1.0",
2525
"@tanstack/react-query": "^5.55.0",
2626
"@trpc/client": "^11.0.0-rc.502",
2727
"@trpc/next": "^11.0.0-rc.502",
2828
"@trpc/react-query": "^11.0.0-rc.502",
2929
"@trpc/server": "^11.0.0-rc.502",
30-
"@zenstackhq/runtime": "^2.9.4",
31-
"@zenstackhq/trpc": "^2.9.4",
30+
"@zenstackhq/runtime": "^2.10.2",
31+
"@zenstackhq/trpc": "^2.10.2",
3232
"babel-plugin-superjson-next": "^0.4.5",
3333
"bcryptjs": "^2.4.3",
3434
"cross-env": "^7.0.3",
@@ -41,7 +41,7 @@
4141
"react-dom": "18.2.0",
4242
"react-toastify": "^9.0.8",
4343
"superjson": "^1.12.0",
44-
"zod": "3.21.1"
44+
"zod": "^3.24.1"
4545
},
4646
"devDependencies": {
4747
"@tailwindcss/line-clamp": "^0.4.2",
@@ -53,9 +53,9 @@
5353
"eslint": "^7.19.0",
5454
"eslint-config-next": "12.3.1",
5555
"postcss": "^8.4.16",
56-
"prisma": "^5.20.0",
56+
"prisma": "^6.1.0",
5757
"tailwindcss": "^3.1.8",
5858
"typescript": "^5.3.2",
59-
"zenstack": "^2.9.4"
59+
"zenstack": "^2.10.2"
6060
}
6161
}

pages/api/auth/[...nextauth].ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,14 @@ export const authOptions: NextAuthOptions = {
6464
return;
6565
}
6666

67-
console.log(`User ${user.id} doesn't belong to any space. Creating one.`);
67+
console.log(
68+
`User ${user.id} doesn't belong to any space. Creating one.`
69+
);
6870
const space = await prisma.space.create({
6971
data: {
7072
name: `${user.name || user.email}'s space`,
7173
slug: nanoid(8),
74+
owner: { connect: { id: user.id } },
7275
members: {
7376
create: [
7477
{
@@ -85,7 +88,9 @@ export const authOptions: NextAuthOptions = {
8588
};
8689

8790
function authorize(prisma: PrismaClient) {
88-
return async (credentials: Record<'email' | 'password', string> | undefined) => {
91+
return async (
92+
credentials: Record<'email' | 'password', string> | undefined
93+
) => {
8994
if (!credentials) {
9095
throw new Error('Missing credentials');
9196
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/*
2+
Warnings:
3+
4+
- Added the required column `ownerId` to the `Space` table without a default value. This is not possible if the table is not empty.
5+
6+
*/
7+
-- AlterTable
8+
ALTER TABLE "Space" ADD COLUMN "ownerId" TEXT NOT NULL;
9+
10+
-- AddForeignKey
11+
ALTER TABLE "Space" ADD CONSTRAINT "Space_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

prisma/migrations/migration_lock.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
# Please do not edit this file manually
2-
# It should be added in your version-control system (i.e. Git)
2+
# It should be added in your version-control system (e.g., Git)
33
provider = "postgresql"

prisma/schema.prisma

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ model Space {
2222
id String @id() @default(uuid())
2323
createdAt DateTime @default(now())
2424
updatedAt DateTime @updatedAt()
25+
owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
26+
ownerId String
2527
name String
2628
slug String @unique()
2729
members SpaceUser[]
@@ -49,7 +51,8 @@ model User {
4951
emailVerified DateTime?
5052
password String?
5153
name String?
52-
spaces SpaceUser[]
54+
ownedSpaces Space[]
55+
memberships SpaceUser[]
5356
image String?
5457
lists List[]
5558
todos Todo[]

schema.zmodel

+10-4
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ model Space {
3939
id String @id @default(uuid())
4040
createdAt DateTime @default(now())
4141
updatedAt DateTime @updatedAt
42+
owner User @relation(fields: [ownerId], references: [id], onDelete: Cascade)
43+
ownerId String @default(auth().id)
4244
name String @length(4, 50)
4345
slug String @unique @regex('^[0-9a-zA-Z]{4,16}$')
4446
members SpaceUser[]
@@ -74,8 +76,11 @@ model SpaceUser {
7476
// require login
7577
@@deny('all', auth() == null)
7678

77-
// space admin can create/update/delete
78-
@@allow('create,update,delete', space.members?[user == auth() && role == ADMIN])
79+
// space owner can add any one
80+
@@allow('create', space.owner == auth())
81+
82+
// space admin can add anyone but not himself
83+
@@allow('create', auth() != this.user && space.members?[user == auth() && role == ADMIN])
7984

8085
// user can read entries for spaces which he's a member of
8186
@@allow('read', space.members?[user == auth()])
@@ -92,7 +97,8 @@ model User {
9297
emailVerified DateTime?
9398
password String? @password @omit
9499
name String?
95-
spaces SpaceUser[]
100+
ownedSpaces Space[]
101+
memberships SpaceUser[]
96102
image String? @url
97103
lists List[]
98104
todos Todo[]
@@ -104,7 +110,7 @@ model User {
104110
@@allow('create', true)
105111

106112
// can be read by users sharing any space
107-
@@allow('read', spaces?[space.members?[user == auth()]])
113+
@@allow('read', memberships?[space.members?[user == auth()]])
108114

109115
// full access by oneself
110116
@@allow('all', auth() == this)

server/routers/generated/client/Account.next.type.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/client/List.next.type.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/client/Space.next.type.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/client/SpaceUser.next.type.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/client/Todo.next.type.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/client/User.next.type.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/client/next.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/client/utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/helper.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/routers/Account.router.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/routers/List.router.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/routers/Space.router.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/routers/SpaceUser.router.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/routers/Todo.router.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/routers/User.router.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

server/routers/generated/routers/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/******************************************************************************
2-
* This file was generated by ZenStack CLI 2.9.4.
2+
* This file was generated by ZenStack CLI.
33
******************************************************************************/
44

55
/* eslint-disable */

tailwind.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ module.exports = {
77
theme: {
88
extend: {},
99
},
10-
plugins: [require('daisyui'), require('@tailwindcss/line-clamp')],
10+
plugins: [require('daisyui')],
1111
daisyui: {
1212
themes: false,
1313
},

0 commit comments

Comments
 (0)