I want to add some notes to the following blog post: http://fabiostrozzi.eu/2009/11/23/sudo-like-tool-for-alfresco-webscripts/. It is really useful solution, but it doesn't allow to call functions with parameters and functions from another JS object...
My implementation of Sudo class:
Using sudo service in webscripts:
My implementation of Sudo class:
import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.ScriptableObject;
public class Sudo extends BaseScopableProcessorExtension {
public Object su(final Function func) {
final Scriptable scope = getScope();
return su(func,scope);
}
public Object su(final Function func, final Scriptable scope, final Object... objects) {
final Context cx = Context.getCurrentContext();
AuthenticationUtil.RunAsWork&lgObject> raw = new AuthenticationUtil.RunAsWork&lgObject>() {
public Object doWork() throws Exception {
return func.call(cx, ScriptableObject.getTopLevelScope(scope), scope, objects);
}
};
return AuthenticationUtil.runAs(raw, AuthenticationUtil.getSystemUserName());
}
}
Initializing of Spring bean:Using sudo service in webscripts:
var SudoExample = {
writeToLog : function(a,b) {
logger.getSystem().out("First parameter = " + a);
logger.getSystem().out("Second parameter = " + a);
},
execute: function() {
sudo.su(this.writeToLog,this, "param#1", "param#2");
}
}
SudoExample.execute();
Комментариев нет :
Отправить комментарий