ウェブサイト検索

javascript - Prismaモデルでの最小/最大制約の設定方法(PostgreSQL)


データベースにユーザーを追加する前に、年齢が18歳以上かどうかを確認することが可能かどうか疑問に思っています。RESTエンドポイントで実行時に確認できることは分かっていますが、この方法の方が少し安全かもしれません(?). もしかすると、この確認を含む生のSQLをマイグレーションに追加することが可能かもしれません。実際のアプリでリレーショナルデータベースを使うのは初めてで、MongoDBとMongooseでは、スキーマ内に age: { type: number, min: 18, max: 99 } と定義するだけでした。

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id              Int      @id @default(autoincrement())
  name            String   @unique @db.VarChar(40)
  email           String   @unique @db.VarChar(120)
  age             Int      // check if age is +18 here
}

回答 #1

私は、Prisma が min や max のような制約をサポートしていないと考えています

コード内で手動で確認することは可能ですが、値はデータベースで任意のint値に変更される可能性があります

回答 #2

私はマクシムと同じ結論を信じていますが、ただ指摘したいのは、単純なIDの代わりにUUIDを使用するべきだということです。これにより、「IDOR」と呼ばれる可能性のある攻撃、あるいは「不安全な直接オブジェクト参照」とも知られる攻撃の可能性が開かれます。

関連記事