2014-09-10 4 views
0

CRUDify를 사용할 때 레코드가 저장되면 레코드의 '소유자'필드가 자동으로 로그인 한 사용자로 설정되어 있는지 확인하려면 어떻게해야합니까?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

솔루션 here을 찾을 수있었습니다. owner 필드의 defaultValue를 다음과 같이 재정의해야했습니다.

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