使用CRUDify时,如何确保在保存记录时,'所有者'记录的字段自动设置为登录用户?

时间:2014-09-10 21:21:23

标签: scala lift

使用CRUDify时,如何确保在保存记录时,记录的“所有者”字段会自动设置为登录用户?

鉴于下面的模型,我希望CRUDify方法将“owner”字段设置为等于登录用户的id(主键)。我正在使用Lift的MegaProtoUser。

我必须覆盖什么,我该怎么做?

class Mytable extends LongKeyedMapper[Mytable] with IdPK {

  def getSingleton = Myclass

  object owner extends MappedLongForeignKey(this, User) 
  object description extends MappedString(this, 140)
  object name extends MappedString(this, 140)
  object status extends MappedInt(this) 
  object entry_number extends MappedInt(this) 
  object quantity extends MappedDecimal(this, MathContext.DECIMAL64, 2) 
}

object Mytable extends Mytable with LongKeyedMetaMapper[Mytable] with CRUDify[Long, Mytable] {

  override def editMenuLoc:Box[Menu] = Empty
  override def deleteMenuLoc:Box[Menu] = Empty
  override def viewMenuLoc:Box[Menu] = Empty
  override def createMenuLocParams: List[Loc.AnyLocParam] = List(If(User.loggedIn_? _, "Not logged in"))
  override def showAllMenuLocParams: List[Loc.AnyLocParam] = List(If(User.loggedIn_? _, "Not logged in"))

  override def findForList(start: Long, cnt: Int): List[Mytable] =
    findAll(StartAt(start), MaxRows(cnt), By(owner, User.currentUser))

  override def findForParam(in: String): Box[Mytable] =
    for {
      user <- User.currentUser
      id <- Helpers.asLong(in)
      mytable <- find(By(this.id, id), By(owner, user))
    } yield mytable
}

1 个答案:

答案 0 :(得分:0)

我设法找到了解决方案here。我只需要覆盖owner字段的defaultValue,如下所示:

object owner extends MappedLongForeignKey(this, User) {
    override def defaultValue = User.currentUser match {case Full(x) => x.id.get; case _ => 0}
  }