diff --git a/process/Permission_lib/process.js b/process/Permission_lib/process.js
index f4046891fd046027d1d6f4a726f096f418c6a50c..ad9832922aee643117bad0e7aa4bda94d9bbcce9 100644
--- a/process/Permission_lib/process.js
+++ b/process/Permission_lib/process.js
@@ -1,3 +1,5 @@
+import("system.logging");
+import("system.vars");
 import("system.tools");
 import("system.SQLTYPES");
 import("system.util");
@@ -16,7 +18,7 @@ function PermissionUtil () {}
 
     let alias = SqlUtils.getSystemAlias();
     let sqlHelper = new SqlMaskingUtils(alias);
-    
+  
     /**
      * Returns the default empty condition string for the given entity.
      * 
@@ -39,9 +41,9 @@ function PermissionUtil () {}
     PermissionUtil.getChildSetsOfSet = function (pSetId) 
     {   
         return newSelect("ASYS_PERMISSIONSETID", alias)
-                    .from("ASYS_PERMISSIONSET")
-                    .whereIfSet("ASYS_PERMISSIONSET.ASYS_PERMISSIONSET_ID", pSetId)
-                    .arrayColumn(true);
+        .from("ASYS_PERMISSIONSET")
+        .whereIfSet("ASYS_PERMISSIONSET.ASYS_PERMISSIONSET_ID", pSetId)
+        .arrayColumn(true);
     }
 
     /**
@@ -54,10 +56,10 @@ function PermissionUtil () {}
     PermissionUtil.getActionsOfSet = function (pSetId)
     {
         return newSelect("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID", alias)
-                    .from("ASYS_PERMISSIONACTION")
-                    .join("ASYS_PERMISSION", "ASYS_PERMISSION.ASYS_PERMISSIONID = ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID")
-                    .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID", pSetId)
-                    .arrayColumn(true);
+        .from("ASYS_PERMISSIONACTION")
+        .join("ASYS_PERMISSION", "ASYS_PERMISSION.ASYS_PERMISSIONID = ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID")
+        .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID", pSetId)
+        .arrayColumn(true);
     }
     
     /**
@@ -72,9 +74,9 @@ function PermissionUtil () {}
             return [];
                 
         return newSelect("ASYS_PERMISSIONACTIONID", alias)
-                .from("ASYS_PERMISSIONACTION")
-                .whereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID", pPermIds, SqlBuilder.IN())
-                .arrayColumn(true);
+        .from("ASYS_PERMISSIONACTION")
+        .whereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID", pPermIds, SqlBuilder.IN())
+        .arrayColumn(true);
     }
 
     /**
@@ -87,9 +89,9 @@ function PermissionUtil () {}
     PermissionUtil.resolveActionId = function (pActionId)
     {
         return newSelect("ASYS_PERMISSIONACTION.ACTION", alias)
-                    .from("ASYS_PERMISSIONACTION")
-                    .whereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID", pActionId)
-                    .cell(true);
+        .from("ASYS_PERMISSIONACTION")
+        .whereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID", pActionId)
+        .cell(true);
     }
 
     /**
@@ -133,7 +135,7 @@ function PermissionUtil () {}
         return notFound;
     }
 
-/**
+    /**
  * Checks a permission if the given actions are different to the actions in the database.
  * 
  * @param {String} pPermId permission id to which the actions are linked to
@@ -144,9 +146,9 @@ function PermissionUtil () {}
  */
     PermissionUtil.getActionDiff = function(pPermId, pActionNew) {
         var actionOld = newSelect("ACTION", alias)
-                            .from("ASYS_PERMISSIONACTION")
-                            .whereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID", pPermId)
-                            .arrayColumn(true);
+        .from("ASYS_PERMISSIONACTION")
+        .whereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID", pPermId)
+        .arrayColumn(true);
     
         return arrDiff(actionOld, pActionNew);
     }
@@ -166,9 +168,9 @@ function PermissionUtil () {}
  */
     PermissionUtil.isDiff = function(pId, pString, pDbCol, pDbTable) {
         var stringDb = newSelect(pDbCol, alias)
-                            .from(pDbTable)
-                            .whereIfSet([pDbTable, pDbTable + "ID"], pId)
-                            .cell(true);
+        .from(pDbTable)
+        .whereIfSet([pDbTable, pDbTable + "ID"], pId)
+        .cell(true);
         return stringDb != pString ? true : false;
     }
 
@@ -210,13 +212,13 @@ function PermissionUtil () {}
      */
     PermissionUtil.getNumberOfPermissions = function(pEntityName, pRole) {
         return newSelect("COUNT(*)", alias)
-                    .from("ASYS_PERMISSIONSET")
-                    .whereIfSet("ASYS_PERMISSIONSET.ENTITY_ID", pEntityName)
-                    .andIfSet("ASYS_PERMISSIONSET.ROLE_ID", pRole)
-                    .cell(true, "0");
+        .from("ASYS_PERMISSIONSET")
+        .whereIfSet("ASYS_PERMISSIONSET.ENTITY_ID", pEntityName)
+        .andIfSet("ASYS_PERMISSIONSET.ROLE_ID", pRole)
+        .cell(true, "0");
     }
 
-/**
+    /**
  * Gets the default permission of the root permission set.
  * 
  * @param {String} pPermId id of the permission
@@ -228,9 +230,9 @@ function PermissionUtil () {}
 
         while (parentSet[0] != "") {
             parentSet = newSelect("ASYS_PERMISSIONSET_ID, ASYS_PERMISSIONSETID", alias)
-                            .from("ASYS_PERMISSIONSET")
-                            .where("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID", parentSet[0])
-                            .arrayRow();
+            .from("ASYS_PERMISSIONSET")
+            .where("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID", parentSet[0])
+            .arrayRow();
         }
     
         return PermissionUtil.getPermissionWithoutCond(parentSet[1]);
@@ -245,9 +247,9 @@ function PermissionUtil () {}
      */
     PermissionUtil._getEntity = function(pSetId) {
         return newSelect("ENTITY_ID", alias)
-                    .from("ASYS_PERMISSIONSET")
-                    .whereIfSet("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID", pSetId)
-                    .cell(true, "");
+        .from("ASYS_PERMISSIONSET")
+        .whereIfSet("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID", pSetId)
+        .cell(true, "");
     }
 
     /**
@@ -261,13 +263,13 @@ function PermissionUtil () {}
         var emptyCond = PermissionUtil.getEmptyCondString(PermissionUtil._getEntity(pSetId));
 
         return newSelect("ASYS_PERMISSIONID", alias)
-                    .from("ASYS_PERMISSION")
-                    .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID", pSetId)
-                    .and(new SqlBuilder(alias).where()
-                            .or("COND is null")
-                            .or("ASYS_PERMISSION.COND", emptyCond, sqlHelper.castLob("#", 254) +" = ?")
-                    )
-                    .cell();
+        .from("ASYS_PERMISSION")
+        .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID", pSetId)
+        .and(new SqlBuilder(alias).where()
+            .or("COND is null")
+            .or("ASYS_PERMISSION.COND", emptyCond, sqlHelper.castLob("#", 254) +" = ?")
+            )
+        .cell();
     }
 
     /**
@@ -281,13 +283,13 @@ function PermissionUtil () {}
         var emptyCond = PermissionUtil.getEmptyCondString(PermissionUtil._getEntity(pSetId));
     
         return newSelect("ASYS_PERMISSIONID", alias)
-                    .from("ASYS_PERMISSION")
-                    .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID", pSetId)
-                    .and(new SqlBuilder(alias).where()
-                            .or("COND is not null")
-                            .or("ASYS_PERMISSION.COND", emptyCond, sqlHelper.castLob("#", 254) +" != ?")
-                    )
-                    .arrayColumn();
+        .from("ASYS_PERMISSION")
+        .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID", pSetId)
+        .and(new SqlBuilder(alias).where()
+            .or("COND is not null")
+            .or("ASYS_PERMISSION.COND", emptyCond, sqlHelper.castLob("#", 254) +" != ?")
+            )
+        .arrayColumn();
     }
 
     /**
@@ -306,10 +308,10 @@ function PermissionUtil () {}
     PermissionUtil.getSet = function(pRole, pEntity, pAccessType, pField) {
         
         var query = newSelect("ASYS_PERMISSIONSETID", alias)
-                        .from("ASYS_PERMISSIONSET")
-                        .where("ASYS_PERMISSIONSET.ROLE_ID", pRole)
-                        .and("ASYS_PERMISSIONSET.ENTITY_ID", pEntity)
-                        .and("ASYS_PERMISSIONSET.ACCESSTYPE", pAccessType);
+        .from("ASYS_PERMISSIONSET")
+        .where("ASYS_PERMISSIONSET.ROLE_ID", pRole)
+        .and("ASYS_PERMISSIONSET.ENTITY_ID", pEntity)
+        .and("ASYS_PERMISSIONSET.ACCESSTYPE", pAccessType);
         
         if (pField) {
             query.and("ASYS_PERMISSIONSET.FIELD_ID", pField)
@@ -328,11 +330,11 @@ function PermissionUtil () {}
      */
     PermissionUtil.getSetRoot = function(pRole, pEntity) {
         return newSelect("ASYS_PERMISSIONSETID", alias)
-                    .from("ASYS_PERMISSIONSET")
-                    .where("ASYS_PERMISSIONSET.ROLE_ID", pRole)
-                    .and("ASYS_PERMISSIONSET.ENTITY_ID", pEntity)
-                    .and("ASYS_PERMISSIONSET.ACCESSTYPE", "E")
-                    .cell();
+        .from("ASYS_PERMISSIONSET")
+        .where("ASYS_PERMISSIONSET.ROLE_ID", pRole)
+        .and("ASYS_PERMISSIONSET.ENTITY_ID", pEntity)
+        .and("ASYS_PERMISSIONSET.ACCESSTYPE", "E")
+        .cell();
     }
 
     /**
@@ -344,9 +346,9 @@ function PermissionUtil () {}
      */
     PermissionUtil.getParentSet = function(pPermId) {
         return newSelect("ASYS_PERMISSIONSET_ID", alias)
-                    .from("ASYS_PERMISSION")
-                    .where("ASYS_PERMISSION.ASYS_PERMISSIONID", pPermId)
-                    .cell();
+        .from("ASYS_PERMISSION")
+        .where("ASYS_PERMISSION.ASYS_PERMISSIONID", pPermId)
+        .cell();
     }
     
     /**
@@ -358,9 +360,9 @@ function PermissionUtil () {}
      */
     PermissionUtil.getParentSetOfSet = function(pSetId) {
         return newSelect("ASYS_PERMISSIONSET_ID", alias)
-                    .from("ASYS_PERMISSIONSET")
-                    .where("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID", pSetId)
-                    .cell();
+        .from("ASYS_PERMISSIONSET")
+        .where("ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID", pSetId)
+        .cell();
     }
 
     /**
@@ -389,9 +391,9 @@ function PermissionUtil () {}
      */
     PermissionUtil.getPermissions = function(pSetIds) {
         return newSelect("ASYS_PERMISSIONID", alias)
-                    .from("ASYS_PERMISSION")
-                    .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID", pSetIds, SqlBuilder.IN())
-                    .arrayColumn(true); // returns empty array if pSetIds is an empty array
+        .from("ASYS_PERMISSION")
+        .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONSET_ID", pSetIds, SqlBuilder.IN())
+        .arrayColumn(true); // returns empty array if pSetIds is an empty array
     }
 
     /**
@@ -403,9 +405,9 @@ function PermissionUtil () {}
      */
     PermissionUtil.getCondType = function(pPermId) {
         return newSelect("CONDTYPE", alias)
-                    .from("ASYS_PERMISSION")
-                    .where("ASYS_PERMISSION.ASYS_PERMISSIONID", pPermId)
-                    .cell();
+        .from("ASYS_PERMISSION")
+        .where("ASYS_PERMISSION.ASYS_PERMISSIONID", pPermId)
+        .cell();
     }
     
     /**
@@ -491,9 +493,9 @@ function PermissionUtil () {}
         ];
         
         var actionNotExists = newSelect("ASYS_PERMISSIONACTIONID", alias)
-                                        .from("ASYS_PERMISSIONACTION")
-                                        .whereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID", pActionId)
-                                        .cell(true) == "";
+        .from("ASYS_PERMISSIONACTION")
+        .whereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID", pActionId)
+        .cell(true) == "";
                                         
         var actionId;
         if (pActionId != null & pActionId != "" && pActionId != undefined && actionNotExists) {
@@ -517,9 +519,9 @@ function PermissionUtil () {}
      */
     PermissionUtil.getCond = function(pPermId) {
         return newSelect("COND", alias)
-                    .from("ASYS_PERMISSION")
-                    .where("ASYS_PERMISSION.ASYS_PERMISSIONID", pPermId)
-                    .cell();
+        .from("ASYS_PERMISSION")
+        .where("ASYS_PERMISSION.ASYS_PERMISSIONID", pPermId)
+        .cell();
     }
 
     /**
@@ -531,9 +533,9 @@ function PermissionUtil () {}
      */
     PermissionUtil.permissionExists = function(pPermId) {
         var permissionCount = newSelect("COUNT(*)", alias)
-                                .from("ASYS_PERMISSION")
-                                .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONID", pPermId)
-                                .cell(true, "0");
+        .from("ASYS_PERMISSION")
+        .whereIfSet("ASYS_PERMISSION.ASYS_PERMISSIONID", pPermId)
+        .cell(true, "0");
         
         return permissionCount != "0";
     }
@@ -549,10 +551,10 @@ function PermissionUtil () {}
      */
     PermissionUtil.actionExists = function(pAction, pPermId) {
         var permissionActionCount = newSelect("COUNT(*)", alias)
-                                .from("ASYS_PERMISSIONACTION")
-                                .where("ASYS_PERMISSIONACTION.ACTION", pAction)
-                                .and("ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID", pPermId)
-                                .cell();
+        .from("ASYS_PERMISSIONACTION")
+        .where("ASYS_PERMISSIONACTION.ACTION", pAction)
+        .and("ASYS_PERMISSIONACTION.ASYS_PERMISSION_ID", pPermId)
+        .cell();
 
         return permissionActionCount != 0;
     }
@@ -577,20 +579,20 @@ function PermissionUtil () {}
      */
     PermissionUtil.getPermission = function(pRole, pEntity, pField, pAccesstype, pCondition, pCondtype) {
         var permissionSelect = newSelect("ASYS_PERMISSION.ASYS_PERMISSIONID", alias)
-                                    .from("ASYS_PERMISSIONSET")
-                                    .join("ASYS_PERMISSION",  "ASYS_PERMISSION.ASYS_PERMISSIONSET_ID = ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID")
-                                    .where("ASYS_PERMISSIONSET.ENTITY_ID", pEntity)
-                                    .and("ASYS_PERMISSIONSET.ROLE_ID", pRole)
-                                    .and("ASYS_PERMISSIONSET.ACCESSTYPE", pAccesstype)
+        .from("ASYS_PERMISSIONSET")
+        .join("ASYS_PERMISSION",  "ASYS_PERMISSION.ASYS_PERMISSIONSET_ID = ASYS_PERMISSIONSET.ASYS_PERMISSIONSETID")
+        .where("ASYS_PERMISSIONSET.ENTITY_ID", pEntity)
+        .and("ASYS_PERMISSIONSET.ROLE_ID", pRole)
+        .and("ASYS_PERMISSIONSET.ACCESSTYPE", pAccesstype)
 
         var emptyCond = PermissionUtil.getEmptyCondString(pEntity);
     
         if (checkInput([pCondition])) {
             if (pCondition == emptyCond) {
                 permissionSelect.and(new SqlBuilder(alias).where()
-                                        .or("ASYS_PERMISSION.COND", emptyCond, sqlHelper.castLob("#", 254) + " = ?")
-                                        .or("COND is null")
-                                    );
+                    .or("ASYS_PERMISSION.COND", emptyCond, sqlHelper.castLob("#", 254) + " = ?")
+                    .or("COND is null")
+                    );
             } else {
                 // SqlMaskingUtils.castLob causes an error in this case (at least on derby-db)
                 // derby-db max size of char is 254 and castLob casts to char first, then to varchar
@@ -620,7 +622,7 @@ function PermissionUtil () {}
      */
     PermissionUtil.deleteAction = function(pActionId) {
         return newWhereIfSet("ASYS_PERMISSIONACTION.ASYS_PERMISSIONACTIONID", pActionId, undefined, undefined, alias)
-                 .deleteData(true, "ASYS_PERMISSIONACTION");
+        .deleteData(true, "ASYS_PERMISSIONACTION");
     }
     
     /**
@@ -659,6 +661,50 @@ function PermissionUtil () {}
         return roleTitle;
     }
     
+    /**
+     * Checks if an given action is linked to any permission of the current user.
+     * 
+     * @param {String} pEntity name of the entity, mandatory
+     * 
+     * @param {String} pAccesstype type of accesslevel ("E", "R" or "F"), mandatory
+     * 
+     * @param {String} pAction action to be checked (view, create, read, update, delete), mandatory
+     * 
+     * @param {String} pField name of the field, nullable
+     * 
+     * @param {String} pCondition condition of the permissions, nullable
+     * 
+     * @result {String} returns true if user has the given action linked to a permission, otherwise false
+     */
+    PermissionUtil.userHasAction = function(pEntity, pAccesstype, pAction, pField, pCondition) {
+        var userRoles = tools.getRoles(vars.get("$sys.user"));
+        var permissions = [];
+        var condition;
+        
+        if (checkInput(pCondition)) {
+            condition = pCondition;
+        } else {
+            condition = PermissionUtil.getEmptyCondString(pEntity);
+        }
+        
+        for each(let role in userRoles) {
+            permissions.push(PermissionUtil.getPermission(role, pEntity, pField, pAccesstype, condition, "1"))
+        }
+        
+        if (permissions.length > 0) {
+            for each(let perm in permissions) {
+                var actionsOfPerm = PermissionUtil.getActions([perm])
+                for each(let action in actionsOfPerm) {
+                    if (PermissionUtil.resolveActionId(action) == pAction) {
+                        return true;
+                        break;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+    
 } //end of block