Skip to content

Commit 0998c41

Browse files
author
Open Lowcode SAS
committed
Close #229
1 parent 462548a commit 0998c41

2 files changed

Lines changed: 29 additions & 1 deletion

File tree

src/org/openlowcode/server/action/SActionRef.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import org.openlowcode.server.graphic.widget.SObjectDisplay;
2222
import org.openlowcode.server.runtime.OLcServer;
2323
import org.openlowcode.server.runtime.SModule;
24+
import org.openlowcode.server.security.ActionSecurityManager;
25+
import org.openlowcode.server.security.SecurityBuffer;
2426
import org.openlowcode.tools.messages.MessageWriter;
2527
import org.openlowcode.tools.misc.Named;
2628
import org.openlowcode.tools.misc.NamedList;
@@ -271,4 +273,26 @@ public ActionExecution getAction() {
271273
public SActionDataLoc<?> getActionData(String name) {
272274
return actiondata.lookupOnName(name);
273275
}
276+
/**
277+
* @return true if the action is authorized, false if not
278+
* @since 1.12
279+
*/
280+
public boolean isAuthorized(String context,SPageData input, SecurityBuffer buffer) {
281+
ActionSecurityManager[] securitymanagers = getAction().getActionSecurityManager();
282+
if (securitymanagers == null) {
283+
logger.info(" no security manager, hide = true");
284+
return false;
285+
}
286+
if (buffer == null)
287+
return true;
288+
for (int i = 0; i < securitymanagers.length; i++) {
289+
ActionSecurityManager thismanager = securitymanagers[i];
290+
SActionData actiondata = this.generatePotentialActionDataForSecurity(input);
291+
if (thismanager.isAuthorizedForCurrentUser(context, actiondata, buffer)) {
292+
logger.info(" found security manager with authorization for user " + thismanager.toString());
293+
return true;
294+
}
295+
}
296+
return false;
297+
}
274298
}

src/org/openlowcode/server/graphic/widget/SGrid.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,14 @@ public void WritePayloadToCDL(MessageWriter writer, SPageData input, SecurityBuf
395395
}
396396
writer.startStructure("MENACTS");
397397
for (int i=0;i<this.menuactions.size();i++) {
398+
// checks that the action is visible
399+
SActionRef thisaction = menuactions.get(i);
400+
if (thisaction.isAuthorized("Menu for SGrid "+this.name, input, buffer)) {
398401
writer.startStructure("MENACT");
399402
writer.addStringField("MENLBL",this.menuactionslabel.get(i));
400-
this.menuactions.get(i).writeToCML(writer);
403+
thisaction.writeToCML(writer);
401404
writer.endStructure("MENACT");
405+
}
402406
}
403407
writer.endStructure("MENACTS");
404408
}

0 commit comments

Comments
 (0)