chore(audit): proper audit for editing submissions

This commit is contained in:
Sarah Vaupel 2019-08-29 14:34:20 +02:00
parent 696ebd889a
commit 24b97ef28e
5 changed files with 57 additions and 11 deletions

View File

@ -14,6 +14,7 @@ data Transaction
= TransactionTermEdit = TransactionTermEdit
{ transactionTerm :: TermId { transactionTerm :: TermId
} }
| TransactionExamRegister | TransactionExamRegister
{ transactionExam :: ExamId { transactionExam :: ExamId
, transactionUser :: UserId , transactionUser :: UserId
@ -22,6 +23,7 @@ data Transaction
{ transactionExam :: ExamId { transactionExam :: ExamId
, transactionUser :: UserId , transactionUser :: UserId
} }
| TransactionExamResultEdit | TransactionExamResultEdit
{ transactionExam :: ExamId { transactionExam :: ExamId
, transactionUser :: UserId , transactionUser :: UserId
@ -30,6 +32,7 @@ data Transaction
{ transactionExam :: ExamId { transactionExam :: ExamId
, transactionUser :: UserId , transactionUser :: UserId
} }
| TransactionCourseParticipantEdit | TransactionCourseParticipantEdit
{ transactionCourse :: CourseId { transactionCourse :: CourseId
, transactionUser :: UserId , transactionUser :: UserId
@ -38,6 +41,7 @@ data Transaction
{ transactionCourse :: CourseId { transactionCourse :: CourseId
, transactionUser :: UserId , transactionUser :: UserId
} }
| TransactionCourseApplicationEdit | TransactionCourseApplicationEdit
{ transactionCourse :: CourseId { transactionCourse :: CourseId
, transactionUser :: UserId , transactionUser :: UserId
@ -48,17 +52,55 @@ data Transaction
, transactionUser :: UserId , transactionUser :: UserId
, transactionCourseApplication :: CourseApplicationId , transactionCourseApplication :: CourseApplicationId
} }
| TransactionSubmissionUser
-- TODO: audit work in progress
| TransactionSubmissionEdit
{ transactionSubmission :: SubmissionId
, transactionSheet :: SheetId
}
| TransactionSubmissionDelete
{ transactionSubmission :: SubmissionId
, transactionSheet :: SheetId
}
-- TODO: audit work in progress
| TransactionSubmissionUserEdit
{ transactionSubmission :: SubmissionId { transactionSubmission :: SubmissionId
, transactionUser :: UserId , transactionUser :: UserId
} }
| TransactionSubmissionCorrectorAssigned | TransactionSubmissionUserDelete
{ transactionSubmission :: SubmissionId { transactionSubmission :: SubmissionId
, transactionMbUser :: Maybe UserId , transactionUser :: UserId
} }
| TransactionSubmissionCorrectionDeleted
{ transactionSubmission :: SubmissionId -- TODO: not yet audited
| TransactionSubmissionFileEdit
{ transactionSubmissionFile :: SubmissionFileId
, transactionSubmission :: SubmissionId
, transactionFile :: FileId
} }
| TransactionSubmissionFileDelete
{ transactionSubmissionFile :: SubmissionFileId
, transactionSubmission :: SubmissionId
, transactionFile :: FileId
}
-- TODO: not yet audited
| TransactionUserEdit
{ transactionUser :: UserId
}
| TransactionUserDelete
{ transactionUser :: UserId
}
-- TODO: not yet audited
| TransactionFileEdit
{ transactionFile :: FileId
}
| TransactionFileDelete
{ transactionFile :: FileId
}
deriving (Eq, Ord, Read, Show, Generic, Typeable) deriving (Eq, Ord, Read, Show, Generic, Typeable)
deriveJSON defaultOptions deriveJSON defaultOptions

View File

@ -465,7 +465,7 @@ correctionsR whereClause displayColumns dbtFilterUI psValidator actions = do
, SubmissionRatingAssigned =. Just now -- save, since only applies to unassigned , SubmissionRatingAssigned =. Just now -- save, since only applies to unassigned
] ]
addMessageI Success $ MsgUpdatedAssignedCorrectorSingle num addMessageI Success $ MsgUpdatedAssignedCorrectorSingle num
mapM_ (\sId -> audit $ TransactionSubmissionCorrectorAssigned sId $ Just uid) sIds mapM_ (\sId -> getJust sId >>= \sub -> audit $ TransactionSubmissionEdit sId $ sub ^. _submissionSheet) sIds
(E.Value selfCorrectors:_) <- E.select . E.from $ \(submission `E.InnerJoin` subuser) -> do (E.Value selfCorrectors:_) <- E.select . E.from $ \(submission `E.InnerJoin` subuser) -> do
E.on $ submission E.^. SubmissionId E.==. subuser E.^. SubmissionUserSubmission E.on $ submission E.^. SubmissionId E.==. subuser E.^. SubmissionUserSubmission
E.where_ $ submission E.^. SubmissionId `E.in_` E.valList subs E.where_ $ submission E.^. SubmissionId `E.in_` E.valList subs
@ -484,7 +484,7 @@ correctionsR whereClause displayColumns dbtFilterUI psValidator actions = do
-- , SubmissionRatingComment =. Nothing -- Kept for easy reassignment by 2nd corrector -- , SubmissionRatingComment =. Nothing -- Kept for easy reassignment by 2nd corrector
] ]
addMessageI Success $ MsgRemovedCorrections num addMessageI Success $ MsgRemovedCorrections num
mapM_ (audit . TransactionSubmissionCorrectionDeleted) subs mapM_ (\subId -> getJust subId >>= \submission -> audit $ TransactionSubmissionEdit subId $ submission ^. _submissionSheet) subs
redirect currentRoute redirect currentRoute
FormSuccess (CorrAutoSetCorrectorData shid, subs') -> do FormSuccess (CorrAutoSetCorrectorData shid, subs') -> do
subs <- mapM decrypt $ Set.toList subs' subs <- mapM decrypt $ Set.toList subs'
@ -948,7 +948,7 @@ postCorrectionsCreateR = do
{ submissionUserUser = sheetUser { submissionUserUser = sheetUser
, submissionUserSubmission = subId , submissionUserSubmission = subId
} }
audit $ TransactionSubmissionUser subId uid audit $ TransactionSubmissionUserEdit subId uid
when (null groups) $ when (null groups) $
addMessageI Warning $ MsgSheetNoRegisteredGroup sheetGroupDesc addMessageI Warning $ MsgSheetNoRegisteredGroup sheetGroupDesc
| length groups < 2 | length groups < 2
@ -965,7 +965,7 @@ postCorrectionsCreateR = do
{ submissionUserUser = sheetPseudonymUser { submissionUserUser = sheetPseudonymUser
, submissionUserSubmission = subId , submissionUserSubmission = subId
} }
audit $ TransactionSubmissionUser subId uid audit $ TransactionSubmissionUserEdit subId uid
when (length spGroup > 1) $ when (length spGroup > 1) $
addMessageI Warning $ MsgSheetNoGroupSubmission sheetGroupDesc addMessageI Warning $ MsgSheetNoGroupSubmission sheetGroupDesc
when allDone $ when allDone $

View File

@ -622,7 +622,8 @@ postSubAssignR tid ssh csh shn cID = do
, SubmissionRatingAssigned =. (now <$ mbUserId) , SubmissionRatingAssigned =. (now <$ mbUserId)
] ]
addMessageI Success MsgCorrectorUpdated addMessageI Success MsgCorrectorUpdated
audit $ TransactionSubmissionCorrectorAssigned sId mbUserId sub <- getJust sId
audit $ TransactionSubmissionEdit sId $ sub ^. _submissionSheet
redirect actionUrl redirect actionUrl
let corrForm = wrapForm' BtnSave corrForm' def let corrForm = wrapForm' BtnSave corrForm' def
{ formAction = Just $ SomeRoute actionUrl { formAction = Just $ SomeRoute actionUrl

View File

@ -78,10 +78,11 @@ writeSubmissionPlan newSubmissionData = do
now <- liftIO getCurrentTime now <- liftIO getCurrentTime
execWriterT . forM_ (Map.toList newSubmissionData) $ \(subId, mCorrector) -> case mCorrector of execWriterT . forM_ (Map.toList newSubmissionData) $ \(subId, mCorrector) -> case mCorrector of
Just _ -> do Just _ -> do
sub <- lift $ getJust subId
lift $ update subId [ SubmissionRatingBy =. mCorrector lift $ update subId [ SubmissionRatingBy =. mCorrector
, SubmissionRatingAssigned =. Just now , SubmissionRatingAssigned =. Just now
] ]
lift $ audit $ TransactionSubmissionCorrectorAssigned subId mCorrector lift $ audit $ TransactionSubmissionEdit subId $ sub ^. _submissionSheet
tell (Set.singleton subId, mempty) tell (Set.singleton subId, mempty)
Nothing -> Nothing ->
tell (mempty, Set.singleton subId) tell (mempty, Set.singleton subId)

View File

@ -167,6 +167,8 @@ makeLenses_ ''Allocation
makeLenses_ ''File makeLenses_ ''File
makeLenses_ ''Submission
-- makeClassy_ ''Load -- makeClassy_ ''Load