Index: main/core/src/main/java/hudson/security/AuthorizationMatrixProperty.java =================================================================== --- main/core/src/main/java/hudson/security/AuthorizationMatrixProperty.java (revision 13596) +++ main/core/src/main/java/hudson/security/AuthorizationMatrixProperty.java (working copy) @@ -5,9 +5,10 @@ import hudson.model.JobProperty; import hudson.model.JobPropertyDescriptor; import hudson.model.Hudson; +import hudson.model.Run; +import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -136,7 +137,10 @@ } public List<PermissionGroup> getAllGroups() { - return Collections.singletonList(PermissionGroup.get(Item.class)); + List<PermissionGroup> list = new ArrayList<PermissionGroup>(2); + list.add(PermissionGroup.get(Item.class)); + list.add(PermissionGroup.get(Run.class)); + return list; } public boolean showPermission(Permission p) { Index: main/core/src/main/java/hudson/Functions.java =================================================================== --- main/core/src/main/java/hudson/Functions.java (revision 13596) +++ main/core/src/main/java/hudson/Functions.java (working copy) @@ -489,8 +489,25 @@ return hasPermission(Hudson.getInstance(),permission); } - public static boolean hasPermission(AccessControlled object, Permission permission) throws IOException, ServletException { - return permission==null || object.hasPermission(permission); + /** + * This version is so that the 'hasPermission' can degrade gracefully + * if "it" is not an {@link AccessControlled} object. + */ + public static boolean hasPermission(Object object, Permission permission) throws IOException, ServletException { + if (permission == null) + return true; + if (object instanceof AccessControlled) + return ((AccessControlled)object).hasPermission(permission); + else { + List<Ancestor> ancs = Stapler.getCurrentRequest().getAncestors(); + for(Ancestor anc : Iterators.reverse(ancs)) { + Object o = anc.getObject(); + if (o instanceof AccessControlled) { + return ((AccessControlled)o).hasPermission(permission); + } + } + return Hudson.getInstance().hasPermission(permission); + } } public static void adminCheck(StaplerRequest req, StaplerResponse rsp, Object required, Permission permission) throws IOException, ServletException { Index: main/core/src/main/resources/lib/hudson/summary.jelly =================================================================== --- main/core/src/main/resources/lib/hudson/summary.jelly (revision 13596) +++ main/core/src/main/resources/lib/hudson/summary.jelly (working copy) @@ -13,7 +13,7 @@ permission object. If specified, the link will be displayed only if you have a permission --> <j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form"> - <j:if test="${h.hasPermission(attrs.permission)}"> + <j:if test="${h.hasPermission(it,attrs.permission)}"> <j:if test="${attrs.icon!=null}"> <tr> <td> @@ -30,4 +30,4 @@ </tr> </j:if> </j:if> -</j:jelly> \ No newline at end of file +</j:jelly> Index: main/core/src/main/resources/hudson/model/AbstractBuild/index.jelly =================================================================== --- main/core/src/main/resources/hudson/model/AbstractBuild/index.jelly (revision 13596) +++ main/core/src/main/resources/hudson/model/AbstractBuild/index.jelly (working copy) @@ -3,12 +3,12 @@ <st:include page="sidepanel.jelly" /> <l:main-panel> <div style="float:right; background-color:white; z-index: 1; position:relative; margin-left: 1em"> - <j:if test="${h.hasPermission(it.UPDATE)}"> + <l:hasPermission permission="${it.UPDATE}"> <st:include page="logKeep.jelly" /> - </j:if> - <j:if test="${h.hasPermission(it.DELETE)}"> + </l:hasPermission> + <l:hasPermission permission="${it.DELETE}"> <st:include page="delete.jelly" /> - </j:if> + </l:hasPermission> <div style="margin-top:1em"> ${%startedAgo(it.timestampString)} </div><div> @@ -125,4 +125,4 @@ </ul> </l:main-panel> </l:layout> -</j:jelly> \ No newline at end of file +</j:jelly>