Skip to content

Commit 2e57ce8

Browse files
authored
Merge pull request #277 from LabKey/fb_merge_25.11_to_develop
Merge discvr-25.11 to develop
2 parents 69f8646 + 61f99ad commit 2e57ce8

File tree

8 files changed

+62
-4
lines changed

8 files changed

+62
-4
lines changed

LDK/api-src/org/labkey/api/ldk/buttons/ShowBulkEditButton.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.labkey.api.module.Module;
2020
import org.labkey.api.query.DetailsURL;
2121
import org.labkey.api.security.permissions.AdminPermission;
22+
import org.labkey.api.security.permissions.Permission;
2223

2324
/**
2425
* User: bimber
@@ -31,8 +32,13 @@ public class ShowBulkEditButton extends SimpleButtonConfigFactory
3132
protected String _queryName;
3233

3334
public ShowBulkEditButton(Module owner, String schemaName, String queryName)
35+
{
36+
this(owner, schemaName, queryName, AdminPermission.class);
37+
}
38+
39+
public ShowBulkEditButton(Module owner, String schemaName, String queryName, Class<? extends Permission> permission)
3440
{
3541
super(owner, "Bulk Edit", DetailsURL.fromString("/ldk/apiBulkEdit.view?schemaName=" + schemaName + "&queryName=" + queryName));
36-
setPermission(AdminPermission.class);
42+
setPermission(permission);
3743
}
3844
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.labkey.api.ldk.security;
2+
3+
import org.labkey.api.security.permissions.AbstractPermission;
4+
5+
public class DataAdminPermission extends AbstractPermission
6+
{
7+
public DataAdminPermission() {
8+
super("DataAdminPermission", "Required for certain operations involving large-scale management of data");
9+
}
10+
}

LDK/api-src/org/labkey/api/ldk/table/SimpleButtonConfigFactory.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,17 @@ protected String getJsHandler(TableInfo ti)
125125
@Override
126126
public boolean isAvailable(TableInfo ti)
127127
{
128-
return _owner == null || ti.getUserSchema().getContainer().getActiveModules().contains(_owner);
128+
if (_owner != null && !ti.getUserSchema().getContainer().getActiveModules().contains(_owner))
129+
{
130+
return false;
131+
}
132+
133+
if (_permission != null && !ti.getUserSchema().getContainer().hasPermission(ti.getUserSchema().getUser(), _permission))
134+
{
135+
return false;
136+
}
137+
138+
return true;
129139
}
130140

131141
@Override

LDK/resources/views/apiBulkEdit.view.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<view xmlns="http://labkey.org/data/xml/view" title="Bulk Edit Using Client API">
22
<requiresPermissions>
3-
<permissionClass name="org.labkey.api.security.permissions.AdminPermission"/>
3+
<permissionClass name="org.labkey.api.ldk.security.DataAdminPermission"/>
44
</requiresPermissions>
55
<dependencies>
66
<dependency path="ldk.context"/>

LDK/src/org/labkey/ldk/query/DefaultTableCustomizer.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,11 @@ private static boolean configureMoreActionsBtn(TableInfo ti, List<ButtonConfigFa
469469
for (ButtonConfigFactory fact : buttons)
470470
{
471471
NavTree newButton = fact.create(ti);
472+
if (!fact.isAvailable(ti) || !fact.isVisible(ti))
473+
{
474+
continue;
475+
}
476+
472477
if (!btnNameMap.containsKey(newButton.getText()))
473478
{
474479
btnNameMap.put(newButton.getText(), newButton);

LDK/test/src/org/labkey/test/tests/external/labModules/LabModulesTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,8 @@ public void testSteps() throws Exception
240240
urlGenerationTest();
241241
peptideTableTest();
242242
searchPanelTest();
243+
244+
testButtonPermissions();
243245
}
244246

245247
protected void setUpTest() throws Exception
@@ -1877,4 +1879,27 @@ public void checkViews()
18771879
//the module contains an R report tied to a specific assay name, so view check fails when an assay of that name isnt present
18781880
//when module-based assays can supply reports this should be corrected
18791881
}
1882+
1883+
protected void testButtonPermissions() throws Exception
1884+
{
1885+
goToProjectHome();
1886+
_helper.clickNavPanelItem("Samples:", "Browse All");
1887+
1888+
DataRegionTable dr = new DataRegionTable("query", this);
1889+
dr.checkAllOnPage();
1890+
1891+
dr.clickHeaderButton("More Actions");
1892+
assertElementPresent(Locator.tagWithText("a", "Bulk Edit"));
1893+
1894+
impersonateRole("Editor");
1895+
refresh();
1896+
1897+
dr = new DataRegionTable("query", this);
1898+
dr.checkAllOnPage();
1899+
1900+
dr.clickHeaderButton("More Actions");
1901+
assertElementNotPresent(Locator.tagWithText("a", "Bulk Edit"));
1902+
1903+
stopImpersonating();
1904+
}
18801905
}

laboratory/src/org/labkey/laboratory/LaboratoryModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ protected void doStartupAfterSpringConfig(ModuleContext moduleContext)
196196
btn4.setPermission(UpdatePermission.class);
197197
LDKService.get().registerQueryButton(btn4, LaboratoryModule.SCHEMA_NAME, LaboratorySchema.TABLE_SAMPLES);
198198

199-
LDKService.get().registerQueryButton(new ShowBulkEditButton(this, LaboratoryModule.SCHEMA_NAME, LaboratorySchema.TABLE_SAMPLES), LaboratoryModule.SCHEMA_NAME, LaboratorySchema.TABLE_SAMPLES);
199+
LDKService.get().registerQueryButton(new ShowBulkEditButton(this, LaboratoryModule.SCHEMA_NAME, LaboratorySchema.TABLE_SAMPLES, LaboratoryAdminPermission.class), LaboratoryModule.SCHEMA_NAME, LaboratorySchema.TABLE_SAMPLES);
200200

201201
SimpleButtonConfigFactory btn5 = new SimpleButtonConfigFactory(this, "Manage Freezers", DetailsURL.fromString("/query/executeQuery.view?schemaName=laboratory&query.queryName=freezers"));
202202
btn5.setPermission(LaboratoryAdminPermission.class);

laboratory/src/org/labkey/laboratory/security/LaboratoryAdminRole.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.labkey.laboratory.security;
22

33
import org.labkey.api.laboratory.security.LaboratoryAdminPermission;
4+
import org.labkey.api.ldk.security.DataAdminPermission;
45
import org.labkey.api.security.permissions.DeletePermission;
56
import org.labkey.api.security.permissions.InsertPermission;
67
import org.labkey.api.security.permissions.ReadPermission;
@@ -21,6 +22,7 @@ public LaboratoryAdminRole()
2122
InsertPermission.class,
2223
UpdatePermission.class,
2324
DeletePermission.class,
25+
DataAdminPermission.class,
2426
LaboratoryAdminPermission.class
2527
);
2628
}

0 commit comments

Comments
 (0)