diff --git a/modules/dcache-webdav/src/main/java/org/dcache/webdav/DcacheResourceFactory.java b/modules/dcache-webdav/src/main/java/org/dcache/webdav/DcacheResourceFactory.java index dc1a87a93b2..e9a952dc180 100644 --- a/modules/dcache-webdav/src/main/java/org/dcache/webdav/DcacheResourceFactory.java +++ b/modules/dcache-webdav/src/main/java/org/dcache/webdav/DcacheResourceFactory.java @@ -89,6 +89,7 @@ import dmg.cells.nucleus.CellPath; import dmg.cells.services.login.LoginManagerChildrenInfo; +import org.dcache.auth.Origin; import org.dcache.auth.SubjectWrapper; import org.dcache.auth.Subjects; import org.dcache.auth.attributes.LoginAttribute; @@ -1222,7 +1223,25 @@ private PnfsHandler roleAwarePnfsHandler() private Subject roleAwareSubject() { - return isAdmin() ? Subjects.ROOT : getSubject(); + Subject subject = getSubject(); + + if (isAdmin()) { + Origin origin = Subjects.getOrigin(subject); + + if (origin == null) { + return Subjects.ROOT; + } else { + Subject adminSubject = new Subject(false, + Subjects.ROOT.getPrincipals(), + Subjects.ROOT.getPublicCredentials(), + Subjects.ROOT.getPrivateCredentials()); + adminSubject.getPrincipals().add(origin); + adminSubject.setReadOnly(); + return adminSubject; + } + } else { + return subject; + } } private Restriction roleAwareRestriction()