private bool CanExecuteOperation(Operations.ReportingOperation op, ReportingWorklistItemKey itemKey, bool disableIfSubmitForReview) { // if there is no proc step ref, operation is not available if (itemKey.ProcedureStepRef == null) return false; var procedureStep = this.PersistenceContext.Load<ProcedureStep>(itemKey.ProcedureStepRef); // for now, all of these operations assume they are operating on a ReportingProcedureStep // this may need to change in future if (!procedureStep.Is<ReportingProcedureStep>()) return false; // Special Case: // If the user has the SubmitForReview token and the step is unassigned, disable the operation if (disableIfSubmitForReview && procedureStep.AssignedStaff == null && Thread.CurrentPrincipal.IsInRole(AuthorityTokens.Workflow.Report.SubmitForReview)) { return false; } return op.CanExecute(procedureStep.As<ReportingProcedureStep>(), this.CurrentUserStaff); }