diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index e684b4af4b..b70845e3df 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2012-2019 Basis Technology Corp. + * Copyright 2012-2020 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -1114,7 +1114,7 @@ public class Case { CallableSystemAction.get(CaseCloseAction.class).setEnabled(true); CallableSystemAction.get(CaseDetailsAction.class).setEnabled(true); CallableSystemAction.get(DataSourceSummaryAction.class).setEnabled(true); - CallableSystemAction.get(CaseDeleteAction.class).setEnabled(true); + CallableSystemAction.get(CaseDeleteAction.class).setEnabled(FeatureAccessUtils.canDeleteCurrentCase()); CallableSystemAction.get(OpenTimelineAction.class).setEnabled(true); CallableSystemAction.get(OpenCommVisualizationToolAction.class).setEnabled(true); CallableSystemAction.get(CommonAttributeSearchAction.class).setEnabled(true); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java b/Core/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java index a389aca979..6bd0231405 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/CaseDeleteAction.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2011-2018 Basis Technology Corp. + * Copyright 2011-2020 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -35,6 +35,7 @@ import org.openide.util.NbBundle.Messages; import org.openide.util.actions.CallableSystemAction; import org.openide.windows.WindowManager; import org.sleuthkit.autopsy.coreutils.Logger; +import org.sleuthkit.autopsy.featureaccess.FeatureAccessUtils; /** * The action associated with the Delete button of the Case Properties panel. It @@ -54,7 +55,7 @@ final class CaseDeleteAction extends CallableSystemAction { /* * A value of 'null' signifies that there is no case open. */ - setEnabled(null != evt.getNewValue()); + setEnabled(null != evt.getNewValue() && FeatureAccessUtils.canDeleteCurrentCase()); }); } diff --git a/Core/src/org/sleuthkit/autopsy/featureaccess/FeatureAccessUtils.java b/Core/src/org/sleuthkit/autopsy/featureaccess/FeatureAccessUtils.java index 87b4fed4f7..fdc5d8b222 100644 --- a/Core/src/org/sleuthkit/autopsy/featureaccess/FeatureAccessUtils.java +++ b/Core/src/org/sleuthkit/autopsy/featureaccess/FeatureAccessUtils.java @@ -73,6 +73,15 @@ final public class FeatureAccessUtils { return dataSourceDeletionAllowed; } + /** + * Indicates whether or not a user can delete the current case. + * + * @return True or false. + */ + public static boolean canDeleteCurrentCase() { + return currentCaseIsSingleUserCase() || multiUserCaseRestrictionsFileAbsent(); + } + /** * Indicates whether or not the current case is a single-user case. * @@ -83,12 +92,12 @@ final public class FeatureAccessUtils { } /** - * Indicates whether or not the current user is allowed to create or modify - * (add or delete data sources) multi-user cases. + * Indicates whether or not the multi-user case privileges restriction file + * is absent. * * @return True or false. */ - public static boolean multiUserCaseRestrictionsFileAbsent() { + private static boolean multiUserCaseRestrictionsFileAbsent() { File accessLimitingFile = new File(MULTIUSER_CASE_RESTRICTED_FILE_PATH); return !accessLimitingFile.exists(); }