My idea is to use voting for approvals. Works like a charm !!! Jelly script is running as a service and do a transition from "Waiting for approval" to "Approved" status. Custom field Approved (Multiuser picker) is used for choosing people to approve (it might be a group picker or project role in future). Script is checking if users who vote quals users from custom field.
Simple and fast 
Jelly:
<JiraJelly xmlns:jira="jelly:com.atlassian.jira.jelly.enterprise.JiraTagLib" xmlns:core="jelly:core" xmlns:log="jelly:log" >
<jira:Login username="service" password="servicewkp2010">
<log:info>Running approve service</log:info>
<!-- Properties -->
<core:set var="filterForIssues" value="10010" />
<core:set var="approveUsersField" value="Approve" />
<!-- Components -->
<core:invokeStatic className="com.atlassian.jira.ComponentManager" method="getInstance" var="componentManager"/>
<core:invoke on="${componentManager}" method="getIssueManager" var="issueManager"/>
<core:invoke on="${componentManager}" method="getProjectManager" var="projectManager"/>
<core:invoke on="${componentManager}" method="getCustomFieldManager" var="customFieldManager" />
<core:invoke on="${componentManager}" method="getVoteManager" var="voteManager" />
<!-- Run the SearchRequestFilter -->
<jira:RunSearchRequest filterid="${filterForIssues}" var="issues" />
<!-- Iterate over the issues -->
<core:forEach var="issue" items="${issues}">
<log:warn>Checking for approve issue: ${issue.key}</log:warn>
<core:invoke on="${projectManager}" method="getProject" var="project">
<core:arg type="java.lang.Long" value="${issue.project}"/>
</core:invoke>
<core:invoke on="${issueManager}" method="getIssueObject" var="jiraIssue">
<core:arg type="java.lang.String" value="${issue.key}"/>
</core:invoke>
<!-- Get Custom FieldObject: customFieldObj -->
<core:invoke on="${customFieldManager}" method="getCustomFieldObjectByName" var="customFieldObj">
<core:arg type="java.lang.String" value="${approveUsersField}"/>
</core:invoke>
<!-- Get Approve Users for issue -->
<core:invoke on="${customFieldObj}" method="getValue" var="approveUsers">
<core:arg type="com.atlassian.jira.issue.IssueImpl" value="${jiraIssue}"/>
</core:invoke>
<!-- Check voters equals users to approve -->
<core:if test="${approveUsers!=null}">
<core:forEach var="approveUser" items="${approveUsers}">
<core:set var="approveUsersString" value="${approveUser.name} ${approveUsersString}" />
</core:forEach>
<core:set var="usersEquals" value="1" />
<core:invoke on="${voteManager}" method="getVoterUsernames" var="voters">
<core:arg type="org.ofbiz.core.entity.GenericValue" value="${issue}"/>
</core:invoke>
<core:forEach var="voter" items="${voters}">
<core:if test="${!approveUsersString.contains(voter)}">
<core:set var="usersEquals" value="0" />
</core:if>
</core:forEach>
<core:if test="${usersEquals==1}">
<!-- Do whatever possible, comment, transition issue etc -->
<jira:AddComment comment="Approved" issue-key="${issue.key}" />
</core:if>
</core:if>
</core:forEach>
</jira:Login>
</JiraJelly>
Hi everyone,
There is no plan to implement this feature in the foreseeable future. Currently the top priorities of the JIRA development team are:
1. Performance, especially initial page loads for highly-used pages
2. Reducing complexity of setting up and maintaining projects
3. Improving the UX of key tasks for software teams
Thanks for your patience. Please contact me if you have any questions: dmeyer (at) atlassian (dot) com
Regards,
Dave Meyer
Product Manager, JIRA Platform