how to make field read-only except certain project role and certain step at the same time?

For example, I have project roles: Developers, Users.
I want to make my field read-only except on step "In Progress" for Developers, and except on step "Open" for Users.
As a result: ("In Progress" AND Developers) OR ("Open" AND Users).
Help, please :)

7 answers

you can do it by using javascript? let me know if you want do it using JS so i can help you!!

I'm not sure that it will work excellent. But I'm ready to try.
How can I get projectrole and step using javascript?..

small clarification!

do you want field read only on transition screen or view screen?

only on Edit Screen..

the following script will run on edit screen

<script type="text/javascript">  
jQuery(document).ready(function($) {
JIRA.bind(JIRA.Events.NEW_CONTENT_ADDED, function (e,context) {
function makeReadonly(){
		var editFunction=$('#edit-issue-submit').val();
	if(editFunction === 'Update'){
        var user=getCurrentUserName();		
		var statusText=$('#status-val').text();	
		var status=$.trim(statusText);
		var devlopersRoleID='10010';//changr the project role id here
		var usersRoleID='10011';//changr the project role id here
		$("#customfield_10571").attr("readonly", '');
		$("#customfield_10572").attr("readonly", '');	
		if(isUserInGroup(user,devlopersRoleID) && status=='In Progress'){
			//to make text field read only
			$("#customfield_10571").attr("readonly", true);	
		}else if(isUserInGroup(user,usersRoleID) && status=='Open'){
			//to make text field read only
			$("#customfield_10572").attr("readonly", true);	

function getCurrentUserName()
var user;
        url: "/rest/gadget/1.0/currentUser",
        type: 'get',
        dataType: 'json',
        async: false,
        success: function(data) {
            user = data.username;
     return user;
function getUsers(roleID)
var users;
        url: "/rest/api/2/project/TEST/role/"+roleID,//change project Key here(need to replace TEST with your project key)
        type: 'get',
        dataType: 'json',
        async: false,
        success: function(data) {
            users =;
     return users;
function isUserInGroup(user, roleID){
    var users = getUsers(roleID);
    for (i = 0; i < users.length; i++){
         if (users[i].name == user){
              return true;
    return false;

wow, it looks nice! :)

And how can I get system fields? Duedate, assignee..

try with following code

//for dute field
$("#duedate").attr("readonly", true); 
//to hide date picker icon
/to show date picker icon

try with this for assignee field
$("#assignee-field").attr("readonly", true);

I guess function isUserInGroup(user, roleID) doesn't work.

Without this function all is ok..

check the REST API in isUserInGroup(user, roleID) function

Jira on demand?

0 vote
Joe Pitt Community Champion Nov 03, 2013

the behavior plug-in may offer that, but I don't know if you can have it installed.

Suggest an answer

Log in or Join to answer
Community showcase
Sarah Schuster
Posted Jan 29, 2018 in Jira

What are common themes you've seen across successful & failed Jira Software implementations?

Hey everyone! My name is Sarah Schuster, and I'm a Customer Success Manager in Atlassian specializing in Jira Software Cloud. Over the next few weeks I will be posting discussion topics (8 total) to ...

3,296 views 14 20
Join discussion

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you
Atlassian Team Tour

Join us on the Team Tour

We're bringing product updates and pro tips on teamwork to ten cities around the world.

Save your spot