使用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
}
答案 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}
}