The new dropPermissions could be used wherever the old dropPermissions is being used
currently.
It would be possible to add it to the top of globalvars.vm and it would drop permissions
except that
they could be regained once the document content began being rendered and would of course
go away again
when the document content was finished being rendered.
NOTE: This hinges on
http://jira.xwiki.org/jira/browse/XWIKI-4274 being fixed.
I am a bit reserved about the name though since it drops for this "rendering
cycle" so:
{{groovy}}
println('Hello World!');
if (xcontext.get('runOnce')) {
xcontext.set('runOnce', true);
doc.dropPermissions();
doc.getRenderedContent(doc.getContent());
}
{{/groovy}}
would output:
Hello World!
Hello World!
Which means that doc.dropPermissions() is not entirely accurate since the same document
can get
permissions in the same request cycle. It should really be
renderingCycle.dropPermissions() but that
would make no sense to anyone at all. If anyone can think of a better name I'd be
happy to hear it.
Caleb
On 08/13/2011 02:23 AM, Sergiu Dumitriu wrote:
On 08/10/2011 06:22 AM, Caleb James DeLisle wrote:
Right now we have dropPermissions which makes a
specific guarantee, there will not be any programming
right for the duration of the request cycle.
Sometimes a user might want to drop permissions for the duration of the document
rendering.
This would mean {{include}} macros, $doc.getRenderedContent() would allow permissions to
be gained back
while the included document was being rendered and after the content of that document is
finished
rendering, the permissions would be returned.
I think it would do more harm than good to break the promise that dropPermissions() makes
so I propose
adding $doc.dropPermissions() to do this.
I think $doc.dropPermissions() vs. $context.dropPermissions() is intuitive and easily
explained but if
anyone has another suggestion for a name, I'd be glad to hear it.
Can you give me a better example, when would doc.dropPermission be
needed and context.dropPermission is too much? How would you get back
rights? And how do you prevent the supposedly sandboxed code from using
the same mechanism to get back the rights?