{"id":379,"date":"2016-06-07T13:56:57","date_gmt":"2016-06-07T11:56:57","guid":{"rendered":"http:\/\/drinkits.optimisti.lv\/?p=379"},"modified":"2020-11-23T11:41:05","modified_gmt":"2020-11-23T09:41:05","slug":"show-custom-field-for-specific-groups-roles-in-jira","status":"publish","type":"post","link":"https:\/\/www.drinkits.lv\/en\/2016\/06\/07\/show-custom-field-for-specific-groups-roles-in-jira\/","title":{"rendered":"Show Custom Field for specific groups, roles in JIRA (Jira)"},"content":{"rendered":"<p><a href=\"https:\/\/www.drinkits.lv\/wp-content\/uploads\/2016\/06\/script.jpg\" data-lbwps-width=\"809\" data-lbwps-height=\"424\" data-lbwps-srcsmall=\"https:\/\/www.drinkits.lv\/wp-content\/uploads\/2016\/06\/script.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright wp-image-382 size-medium\" src=\"https:\/\/www.drinkits.lv\/wp-content\/uploads\/2016\/06\/script-300x157.jpg\" alt=\"script\" width=\"300\" height=\"157\" srcset=\"https:\/\/www.drinkits.lv\/wp-content\/uploads\/2016\/06\/script-300x157.jpg 300w, https:\/\/www.drinkits.lv\/wp-content\/uploads\/2016\/06\/script-768x403.jpg 768w, https:\/\/www.drinkits.lv\/wp-content\/uploads\/2016\/06\/script.jpg 809w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a>I have written a Javascript code which allows to hide Custom Field from\u00a0all users except groups\/roles defined in script.<\/p>\n<p>Be aware that this is\u00a0just a visual way to hide field. It will be possible to see field in HTML source of page.<\/p>\n<p><strong>Installation:<\/strong> paste it in\u00a0Announcement Banner and set variables\u00a0based on\u00a0your environment.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"js\">&lt;script type=\"text\/javascript\"&gt;\r\n  \/*\tKarlis Rozenbergs, 04.2016\r\n\r\n    Script allows to hide custom field for all users except groups\/roles defined below. \r\n    By default project admin and users mentioned in following field are allowed to see hidden field: customfield_10865 (Confirmed by)\r\n  *\/\r\n\r\n  \/\/Sets field to hide\r\n  var hidefield = \"#customfield_12345-val\";\r\n\r\n  \/\/Sets groups which ar allowed to see defined customfield\r\n  var allowedgroups = ['jira-administrators'];\r\n\r\n  \/\/Sets projects where to hide customfield. If empty, all projects are selected.\r\n  \/\/example: var projects = ['TEST', 'TEST1'];\r\n  var projects = ['TEST1', 'TEST2', 'TEST3'];\r\n\r\n  \/\/Sets issue type where to hide customfield. If empty, all issue types are selected.\r\n  \/\/example: var issuetype = ['19', '3'];\r\n  var issuetype = ['1', '2', '3'];\r\n\r\n  \/\/Sets roles which ar allowed to see defined customfield\r\n  var allowedroles = ['Developers', 'Users'];\r\n\r\n\r\n  \/\/Gets current project key\r\n  issueKey = AJS.$(\"meta[name='ajs-issue-key']\").attr(\"content\")\r\n\r\n  var project = getProjectKey(issueKey);\r\n\r\n  var flag = 0;\r\n  var flag1 = 0;\r\n\r\n  \/\/Check if issue is in defined project\r\n  for (l = 0; l &lt; projects.length; l++){\r\n    if (project == projects[l]) { flag = 1; }\r\n  }\r\n\r\n  if (flag == 1) {\r\n    \r\n    var issuety = getIssueType(issueKey);\r\n  \r\n    \/\/Check if issue is in defined issue type\r\n    for (k = 0; k &lt; issuetype.length; k++){\r\n      if (issuety == issuetype[k]) { flag1 = 1; }\r\n    }\r\n    \r\n    if (flag1 == 1) {\r\n\r\n      var user = getCurrentUserName();\r\n      var aggrName = getIssueAggr(issueKey);\r\n      var aggrName1 = getIssueAggr1(issueKey);\r\n      var flag2 = 0;\r\n      var flag3 = 0;\r\n\r\n      \/\/Gets urls of allowed roles\r\n      var ProjRoles = [];\r\n      for (k = 0; k &lt; allowedroles.length; k++){\r\n        ProjRoles.push(getProjectRoles(project, allowedroles[k]));\r\n      }\r\n\r\n      \/\/Gets allowed users\r\n      var ProjectRoleUser = [];\r\n      for (l = 0; l &lt; ProjRoles.length; l++){\r\n        ProjectRoleUser.push.apply(ProjectRoleUser,getProjectRoleUser(ProjRoles[l]));\r\n      }\r\n\r\n      var allowedobjects= [];\r\n      allowedobjects.push.apply(allowedobjects, ProjectRoleUser);\r\n      allowedobjects.push.apply(allowedobjects, aggrName);\r\n      allowedobjects.push.apply(allowedobjects, aggrName1);\r\n\r\n      \/\/Checks if current user is in array\r\n      for (i = 0; i &lt; allowedobjects.length; i++){\r\n        if (user == allowedobjects[i]) { flag2 = 1; }\r\n      }\r\n\r\n      \/\/Checks if current user is in defined groups\r\n      for (j = 0; j &lt; allowedgroups.length; j++){\r\n        if (isUserInGroup(user, allowedgroups[j])){ flag3 = 1; }\r\n      }\r\n\r\n\r\n      \/\/Checks if all projects and issue types are allowed\r\n      if (projects.length == 0) { flag = 1;}\r\n\r\n      \/\/Checks if all projects and issue types are allowed\r\n      if (issuetype.length == 0) { flag1 = 1;}\r\n\r\n      \/\/Hides defined field\r\n      if (flag2 == 0 &amp;&amp; flag3 == 0 &amp;&amp; flag == 1 &amp;&amp; flag1 == 1) {\r\n        (function($) {\r\n            AJS.toInit(function(){\r\n            AJS.$(hidefield).parent().hide();\r\n            AJS.$(hidefield).parent().value = \"\";\r\n            });\r\n\r\n            JIRA.bind(JIRA.Events.NEW_CONTENT_ADDED, function (e, context) {\r\n            AJS.$(hidefield).parent().hide();\r\n            AJS.$(hidefield).parent().value = \"\";\r\n            });\r\n            })(AJS.$);\r\n      }\r\n    }\r\n  }\r\n    \r\n  function getCurrentUserName()\r\n  {\r\n    var user;\r\n     AJS.$.ajax({\r\n      url: \"\/rest\/gadget\/1.0\/currentUser\",\r\n      type: 'get',\r\n      dataType: 'json',\r\n      async: false,\r\n      success: function(data) {\r\n        user = data.username;\r\n      } \r\n     });\r\n     return user;\r\n  }\r\n\r\n  function getGroups(user)\r\n  {\r\n    var groups;\r\n     AJS.$.ajax({\r\n      url: \"\/rest\/api\/2\/user?username=\"+user+\"&amp;expand=groups\",\r\n      type: 'get',\r\n      dataType: 'json',\r\n      async: false,\r\n      success: function(data) {\r\n        groups = data.groups.items;\r\n      } \r\n     });\r\n     return groups;\r\n  }\r\n\r\n  function isUserInGroup(user, group){\r\n    var groups = getGroups(user);\r\n    for (i = 0; i &lt; groups.length; i++){\r\n      if (groups[i].name == group){\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  function getProjectKey(issueKey)\r\n  {\r\n    var projKey;\r\n     AJS.$.ajax({\r\n      url: \"\/rest\/api\/2\/issue\/\"+issueKey,\r\n      type: 'get',\r\n      dataType: 'json',\r\n      async: false,\r\n      success: function(data) {\r\n        projKey = data.fields.project.key;\r\n      } \r\n     });\r\n     return projKey;\r\n  }\r\n\r\n\r\n  function getIssueAggr(issueKey)\r\n  {\r\n    var aggrName = [];\r\n     AJS.$.ajax({\r\n      url: \"\/rest\/api\/2\/issue\/\"+issueKey,\r\n      type: 'get',\r\n      dataType: 'json',\r\n      async: false,\r\n      success: function(data) {\r\n        if (data.fields.customfield_10865) {\r\n          for (var i=0; i &lt; data.fields.customfield_10865.length; i++){\r\n            aggrName.push(data.fields.customfield_10865[i].name);\r\n          }\r\n        }\r\n      } \r\n     });\r\n     return aggrName;\r\n  }\r\n\r\n  function getIssueAggr1(issueKey)\r\n  {\r\n    var aggrName1 = [];\r\n     AJS.$.ajax({\r\n      url: \"\/rest\/api\/2\/issue\/\"+issueKey,\r\n      type: 'get',\r\n      dataType: 'json',\r\n      async: false,\r\n      success: function(data) {\r\n        if (data.fields.customfield_10864) {\r\n          for (var i=0; i &lt; data.fields.customfield_10864.length; i++){\r\n            aggrName1.push(data.fields.customfield_10864[i].name);\r\n          }\r\n        }\r\n      } \r\n     });\r\n     return aggrName1;\r\n  }\r\n\r\n  function getIssueType(issueKey)\r\n  {\r\n    var issuety;\r\n     AJS.$.ajax({\r\n      url: \"\/rest\/api\/2\/issue\/\"+issueKey,\r\n      type: 'get',\r\n      dataType: 'json',\r\n      async: false,\r\n      success: function(data) {\r\n        issuety = data.fields.issuetype.id;\r\n        \r\n      }\r\n     });\r\n     return issuety;\r\n  }\r\n\r\n  function getProjectRoles(project, role)\r\n  {\r\n    var ProjRoles;\r\n     AJS.$.ajax({\r\n      url: \"\/rest\/api\/2\/project\/\"+project,\r\n      type: 'get',\r\n      dataType: 'json',\r\n      async: false,\r\n      success: function(data) {\r\n        ProjRoles = data.roles[role];\r\n      } \r\n     });\r\n     return ProjRoles;\r\n  }\r\n\r\n  function getProjectRoleUser(RoleUrl)\r\n  {\r\n    var ProjRolesUser = [];\r\n     AJS.$.ajax({\r\n      url: RoleUrl,\r\n      type: 'get',\r\n      dataType: 'json',\r\n      async: false,\r\n      success: function(data) {\r\n        if (data.actors) {\r\n          for (var i=0; i &lt; data.actors.length; i++){\r\n            ProjRolesUser.push(data.actors[i].name);\r\n          }\r\n        }\r\n      } \r\n     });\r\n     return ProjRolesUser;\r\n  }\r\n\r\n&lt;\/script&gt;<\/pre>","protected":false},"excerpt":{"rendered":"<a href=\"https:\/\/www.drinkits.lv\/en\/2016\/06\/07\/show-custom-field-for-specific-groups-roles-in-jira\/\" rel=\"bookmark\" title=\"Permalink to Show Custom Field for specific groups, roles in JIRA (Jira)\"><p>I have written a Javascript code which allows to hide Custom Field from\u00a0all users except groups\/roles defined in script. Be aware that this is\u00a0just a visual way to hide field. It will be possible to see field in HTML source of page. Installation: paste it in\u00a0Announcement Banner and set variables\u00a0based on\u00a0your environment. &lt;script type=&#8221;text\/javascript&#8221;&gt; \/* [&hellip;]<\/p>\n<\/a>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[8],"tags":[32,46,47,90],"class_list":{"0":"post-379","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-skripti","7":"tag-custom-field","8":"tag-javascript","9":"tag-jira","10":"tag-script","11":"h-entry","12":"hentry"},"_links":{"self":[{"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/posts\/379","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/comments?post=379"}],"version-history":[{"count":1,"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/posts\/379\/revisions"}],"predecessor-version":[{"id":593,"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/posts\/379\/revisions\/593"}],"wp:attachment":[{"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/media?parent=379"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/categories?post=379"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.drinkits.lv\/en\/wp-json\/wp\/v2\/tags?post=379"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}