Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Hiding issue fields based on user role

Michael Schultz February 5, 2019

I'm looking for a javascript example for hiding an issue field based on user project role or Jira group membership. Whichever is easier to accomplish. 

Here is a sample script I found which dates back to 2013:

<script type="text/javascript">  
jQuery(document).ready(function($) {
	JIRA.bind(JIRA.Events.NEW_CONTENT_ADDED, function (e,context) {	
		hideFieldForGroup();    
	});
	hideFieldForGroup();
function hideFieldForGroup(){
        var user=getCurrentUserName();		
		var statusText=$('#status-val').text();	
		var status=$.trim(statusText);
		if(isUserInGroup(user,'Developers') && status=='In Progress'){			
			$("#customfield_10571").closest('div.field-group').hide();
		}else if(isUserInGroup(user,'Users') && status=='Open') {
			AJS.$("#customfield_10571").closest('div.field-group').show();
		}

}
function getCurrentUserName(){
var user;
     AJS.$.ajax({
        url: "/rest/gadget/1.0/currentUser",
        type: 'get',
        dataType: 'json',
        async: false,
        success: function(data) {
            user = data.username;
        }
     });
     return user;
}
  
  
function getGroups(user){
var groups;
     AJS.$.ajax({
        url: "/rest/api/2/user?username="+user+"&expand=groups",
        type: 'get',
        dataType: 'json',
        async: false,
        success: function(data) {
            groups = data.groups.items;
        }
     });
     return groups;
}
function isUserInGroup(user, group){
    var groups = getGroups(user);
    for (i = 0; i < groups.length; i++){
         if (groups[i].name == group){
              return true;
         }
    }
    return false;
}
   
});   
 

</script>

 

Is this still a valid script at all?

 

Thanks!

1 answer

1 vote
mfabris
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 6, 2019

This should work

 This in general checks if the user is in a certain group and then you have a line where you can insert your function. The hide() method will still work for your case

<script>
AJS.$(document).ready(function($) {
JIRA.bind(JIRA.Events.NEW_CONTENT_ADDED, function (e,context) {
group();
});
AJS.$("#issuetype").bind("DOMSubtreeModified", function (e, $ctx) {group(); });
group();

//here is a function to get the username via the rest API
function getCurrentUserName() {
var user;
AJS.$.ajax({
url: "/rest/gadget/1.0/currentUser",
type: 'get',
dataType: 'json',
async: false,
success: function(data) {
user = data.username;
}
});
//console.log("##################### getCurrentUserName:"+user); <--------------this is a debugging line and can be removed in the final code
return user;
}

// then is use the username to get the groups he belongs too, also via the rest API

function getGroups(user) {
var groups;
AJS.$.ajax({
url: "/rest/api/2/user?username="+user+"&expand=groups",
type: 'get',
dataType: 'json',
async: false,
success: function(data) {
groups = data.groups.items;
}
});
//console.log("##################### getGroups:", groups); <--------------this is a debugging line and can be removed in the final code
return groups;
}

function isUserInGroup(user, group) {
var groups = getGroups(user);
for (i = 0; i < groups.length; i++){
if (groups[i].name == group){
////console.log("##################### user in group "+group+": true ("+groups[i].name+")"); <--------------this is a debugging line and can be removed in the final code
return true;
}
}
//console.log("##################### user in group: false");
return false;
}

// here i chec if the user is in the group "MyGroup" <--------------this is a debugging line and can be removed in the final code

function group() {
//console.log("##################### group"); <--------------this is a debugging line and can be removed in the final code
var user = getCurrentUserName();
if(isUserInGroup(user,'MyGroup') ){


// here you can trigger your action. for hiding a field you can use $hide("id of the field")
$(do something)


};


//console.log("##################### end"); <--------------this is a debugging line and can be removed in the final code
});

</script>

 

 

mfabris
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 6, 2019

By the way.. this kind of script might still work for one version or two, but sooner or later all JS will be filtered out by JIRA... so if you need a long term solution, you might have to consider something else. 

mfabris
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
February 13, 2019

@Michael Schultz did you try this? 

Michael Schultz March 11, 2019

@mfabris The scope has changed and I won't be needing this after all. Thank you for helping!

Suggest an answer

Log in or Sign up to answer