¿Cómo puedo omitir los campos de clase de caso en una asignación de tabla pulida?

Me estoy enseñando algo de Scala y actualmente me estoy mojando los pies con slick (3.1) + play framework, así que tal vez la respuesta sea simple aquí y me falta algo obvio. Tengo el siguiente modelo y tabla

case class User(id: Long = -1,
                username: String,
                passwordHash: String,
                email: Option[String] = None) 

class Users(tag: Tag) extends Table[User](tag, "USERS") {
    def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
    def username = column[String]("USERNAME")
    def email = column[Option[String]]("EMAIL")
    def passwordHash = column[String]("PASSWD_HASH")
    def * = (id, username, passwordHash, email) <>((User.apply _).tupled, User.unapply)
  }

Ahora, lo anterior funciona bien, pero me gustaría agregar algunos campos aUser&nbsp;clase de caso queno son&nbsp;guardado en la tabla USER, a saber, permisos y roles, como este:

case class User(id: Long = -1,
                username: String,
                passwordHash: String,
                email: Option[String] = None,
                permissions: Seq[String] = Seq.empty,
                roles: Seq[String] = Seq.empty) 

Se supone que deben ir a sus propias tablas respectivas como userid -> permisos / asignaciones de roles (relaciones simples de una a muchas).

En última instancia, también deberían consultarse, pero por ahora me gustaría ignorar los campos adicionales (simplemente como un ejercicio). ¿Cómo ajusto la proyección original en la tabla para omitir / ignorar esos nuevos campos? Obviamente el mapeo original

 def * = (id, username, passwordHash, email) <>((User.apply _).tupled, User.unapply)

ya no funciona ya que el touple no coincide con la clase de caso. Por lo que puedo decir, no debería ser demasiado difícil ya que<>&nbsp;solo toma dos funciones que se convierten de un touple a una instancia de Usuario y viceversa, y esas funciones deberían ignorar los nuevos campos (o completarlos con sus valores predeterminados). Pero no puedo entender cómo expresar eso.

Traté de agregar un nuevoapply()&nbsp;con una firma más corta para elUser&nbsp;objeto complementario, pero luego aparece un error que básicamente me dice que slick no sabe quéapply()&nbsp;usar. Tiene sentido, pero no sé cómo hacer referencia a uno u otro. Hice lo mismo con un constructor adicional paraUser, el resultado es el mismo problema. E intenté escribir funciones de conversión básicas como esta:

class Users(tag: Tag) extends Table[User](tag, "USERS") {

    def constructUser = (id: Long, username: String, passwordHash: String, email: Option[String]) =>
      User(id, username, passwordHash, email)

    def extractUser = (user: User) => user match {
      case User(id, username, passwordHash, email, permissions, roles) =>
        Some((id, username, passwordHash, email))
    }

    def id = column[Long]("ID", O.PrimaryKey, O.AutoInc)
    def username = column[String]("USERNAME")
    def email = column[Option[String]]("EMAIL")
    def passwordHash = column[String]("PASSWD_HASH")
    def * = (id, username, passwordHash, email) <>(constructUser, extractUser)
  }

Lamentablemente, eso también conduce a un error:

[error]  found   : (Long, String, String, Option[String]) => models.User
[error]  required: ? => ?
[error]     def * = (id, username, passwordHash, email) <>(constructUser, deconstructUser)