From b064c5fb7e654279bf07ac003f44cdca65b0c7dd Mon Sep 17 00:00:00 2001 From: bbimber Date: Fri, 9 Jan 2026 11:41:47 -0800 Subject: [PATCH 1/5] Expand test coverage over button permissions --- .../external/labModules/LabModulesTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java b/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java index e51aa912..59499346 100644 --- a/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java +++ b/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java @@ -240,6 +240,8 @@ public void testSteps() throws Exception urlGenerationTest(); peptideTableTest(); searchPanelTest(); + + testButtonPermissions(); } protected void setUpTest() throws Exception @@ -1877,4 +1879,24 @@ public void checkViews() //the module contains an R report tied to a specific assay name, so view check fails when an assay of that name isnt present //when module-based assays can supply reports this should be corrected } + + protected void testButtonPermissions() throws Exception + { + goToProjectHome(); + _helper.clickNavPanelItem("Samples:", "Browse All"); + + DataRegionTable dr = new DataRegionTable("query", this); + dr.checkAllOnPage(); + + dr.clickHeaderMenu("More Actions", false); + assertElementPresent(Locator.tagWithText("a", "Bulk Edit")); + + impersonateRole("Reader"); + + dr = new DataRegionTable("query", this); + dr.checkAllOnPage(); + + dr.clickHeaderMenu("More Actions", false); + assertElementNotPresent(Locator.tagWithText("a", "Bulk Edit")); + } } From 73f8eb550a0c2602cff0c1b28e2c8ff48656256d Mon Sep 17 00:00:00 2001 From: bbimber Date: Sun, 11 Jan 2026 14:28:14 -0800 Subject: [PATCH 2/5] Test fix --- .../labkey/test/tests/external/labModules/LabModulesTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java b/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java index 59499346..ccd16aa9 100644 --- a/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java +++ b/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java @@ -1888,7 +1888,7 @@ protected void testButtonPermissions() throws Exception DataRegionTable dr = new DataRegionTable("query", this); dr.checkAllOnPage(); - dr.clickHeaderMenu("More Actions", false); + dr.clickHeaderButton("More Actions"); assertElementPresent(Locator.tagWithText("a", "Bulk Edit")); impersonateRole("Reader"); @@ -1896,7 +1896,7 @@ protected void testButtonPermissions() throws Exception dr = new DataRegionTable("query", this); dr.checkAllOnPage(); - dr.clickHeaderMenu("More Actions", false); + dr.clickHeaderButton("More Actions"); assertElementNotPresent(Locator.tagWithText("a", "Bulk Edit")); } } From 792b0164d5a2cfc30dd20d39b6ad821b23c3468f Mon Sep 17 00:00:00 2001 From: bbimber Date: Sun, 11 Jan 2026 14:37:07 -0800 Subject: [PATCH 3/5] Bugfix to more actions button permissions --- .../api/ldk/table/SimpleButtonConfigFactory.java | 12 +++++++++++- .../org/labkey/ldk/query/DefaultTableCustomizer.java | 5 +++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/LDK/api-src/org/labkey/api/ldk/table/SimpleButtonConfigFactory.java b/LDK/api-src/org/labkey/api/ldk/table/SimpleButtonConfigFactory.java index 9e6b332a..2ef837de 100644 --- a/LDK/api-src/org/labkey/api/ldk/table/SimpleButtonConfigFactory.java +++ b/LDK/api-src/org/labkey/api/ldk/table/SimpleButtonConfigFactory.java @@ -125,7 +125,17 @@ protected String getJsHandler(TableInfo ti) @Override public boolean isAvailable(TableInfo ti) { - return _owner == null || ti.getUserSchema().getContainer().getActiveModules().contains(_owner); + if (_owner != null && !ti.getUserSchema().getContainer().getActiveModules().contains(_owner)) + { + return false; + } + + if (_permission != null && !ti.getUserSchema().getContainer().hasPermission(ti.getUserSchema().getUser(), _permission)) + { + return false; + } + + return true; } @Override diff --git a/LDK/src/org/labkey/ldk/query/DefaultTableCustomizer.java b/LDK/src/org/labkey/ldk/query/DefaultTableCustomizer.java index 2b16fa5b..fab0c124 100644 --- a/LDK/src/org/labkey/ldk/query/DefaultTableCustomizer.java +++ b/LDK/src/org/labkey/ldk/query/DefaultTableCustomizer.java @@ -469,6 +469,11 @@ private static boolean configureMoreActionsBtn(TableInfo ti, List Date: Sun, 11 Jan 2026 16:51:48 -0800 Subject: [PATCH 4/5] Te --- .../labkey/test/tests/external/labModules/LabModulesTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java b/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java index ccd16aa9..3ac99d97 100644 --- a/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java +++ b/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java @@ -1892,6 +1892,7 @@ protected void testButtonPermissions() throws Exception assertElementPresent(Locator.tagWithText("a", "Bulk Edit")); impersonateRole("Reader"); + refresh(); dr = new DataRegionTable("query", this); dr.checkAllOnPage(); From 9cfd9690bc05d2c97d9e3f91a7673088bdfd59ff Mon Sep 17 00:00:00 2001 From: bbimber Date: Sun, 11 Jan 2026 19:18:29 -0800 Subject: [PATCH 5/5] Test fix --- .../labkey/test/tests/external/labModules/LabModulesTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java b/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java index 3ac99d97..e367882e 100644 --- a/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java +++ b/LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java @@ -1891,7 +1891,7 @@ protected void testButtonPermissions() throws Exception dr.clickHeaderButton("More Actions"); assertElementPresent(Locator.tagWithText("a", "Bulk Edit")); - impersonateRole("Reader"); + impersonateRole("Editor"); refresh(); dr = new DataRegionTable("query", this);