On Wed, Aug 31, 2011 at 15:13, Marius Dumitru Florea
<
mariusdumitru.florea(a)xwiki.com> wrote:
On Wed, Aug 31, 2011 at 3:00 PM, Thomas Mortagne
<thomas.mortagne(a)xwiki.com> wrote:
On Wed, Aug 31, 2011 at 11:45 AM, Marius Dumitru
Florea
<mariusdumitru.florea(a)xwiki.com> wrote:
Hi devs,
I tried to use:
$someDoc.hasProgrammingRights()
but unfortunately this method checks the current/context document, not
the one on which it is called. The code is in com.xpn.xwiki.api.Api:
/**
* Check if the current document has programming rights, meaning that
it was last saved by a user with the
* programming right globally granted.
*
* @return <tt>true</tt> if the current document has the Programming
right or <tt>false</tt> otherwise.
*/
public boolean hasProgrammingRights()
{
com.xpn.xwiki.XWiki xwiki = this.context.getWiki();
return xwiki.getRightService().hasProgrammingRights(this.context);
}
So how do you check if a specific document has programming rights?
AFAICS I need to either access the rights service or change the
context document, but both require programming rights.. How can I
check programming rights without needing them?
$xwiki.hasAccessLevel("programming",
$mydoc.contentAuthor,
"anydocumentitsnotusedanyway")
should work well.
What about the rest of the tests done in
XWikiRightsServiceImpl#hasProgrammingRights(XWikiDocument,
XWikiContext) ? hasAccessLevel('programming', ..) is called only at
the end. I suppose they are needed, otherwise hasProgrammingRights
would have just called hasAccessLevel no?
Thomas has proposed the most correct answer but I see one potential issue if
$mydoc.contentAuthor does not return a fully qualified username (including
the database), so you may need to at least proceed to the addition of the
database of the document to the content author name if it does not contains
a ':'