diff --git a/src/main/scala/plugin/PluginSystem.scala b/src/main/scala/plugin/PluginSystem.scala index 90f8a8a..5408aeb 100644 --- a/src/main/scala/plugin/PluginSystem.scala +++ b/src/main/scala/plugin/PluginSystem.scala @@ -166,8 +166,8 @@ case class PluginRepository(id: String, url: String) case class GlobalMenu(label: String, url: String, icon: String, condition: Context => Boolean) case class RepositoryMenu(label: String, name: String, url: String, icon: String, condition: Context => Boolean) - case class Action(path: String, security: Security, function: (HttpServletRequest, HttpServletResponse) => Any) - case class RepositoryAction(path: String, security: Security, function: (HttpServletRequest, HttpServletResponse, RepositoryInfo) => Any) + case class Action(method: String, path: String, security: Security, function: (HttpServletRequest, HttpServletResponse, Context) => Any) + case class RepositoryAction(method: String, path: String, security: Security, function: (HttpServletRequest, HttpServletResponse, Context, RepositoryInfo) => Any) case class Button(label: String, href: String) case class JavaScript(filter: String => Boolean, script: String) diff --git a/src/main/scala/plugin/ScalaPlugin.scala b/src/main/scala/plugin/ScalaPlugin.scala index 8c779b1..599a0a7 100644 --- a/src/main/scala/plugin/ScalaPlugin.scala +++ b/src/main/scala/plugin/ScalaPlugin.scala @@ -36,12 +36,12 @@ globalMenuList += GlobalMenu(label, url, icon, condition) } - def addGlobalAction(path: String, security: Security = All())(function: (HttpServletRequest, HttpServletResponse) => Any): Unit = { - globalActionList += Action(path, security, function) + def addGlobalAction(method: String, path: String, security: Security = All())(function: (HttpServletRequest, HttpServletResponse, Context) => Any): Unit = { + globalActionList += Action(method, path, security, function) } - def addRepositoryAction(path: String, security: Security = All())(function: (HttpServletRequest, HttpServletResponse, RepositoryInfo) => Any): Unit = { - repositoryActionList += RepositoryAction(path, security, function) + def addRepositoryAction(method: String, path: String, security: Security = All())(function: (HttpServletRequest, HttpServletResponse, Context, RepositoryInfo) => Any): Unit = { + repositoryActionList += RepositoryAction(method, path, security, function) } def addJavaScript(filter: String => Boolean, script: String): Unit = { diff --git a/src/main/scala/servlet/PluginActionInvokeFilter.scala b/src/main/scala/servlet/PluginActionInvokeFilter.scala index 8d58658..8bfc49d 100644 --- a/src/main/scala/servlet/PluginActionInvokeFilter.scala +++ b/src/main/scala/servlet/PluginActionInvokeFilter.scala @@ -32,13 +32,15 @@ private def processGlobalAction(path: String, request: HttpServletRequest, response: HttpServletResponse) (implicit session: Session): Boolean = { - plugin.PluginSystem.globalActions.find(_.path == path).map { action => + plugin.PluginSystem.globalActions.find(x => + x.method.toLowerCase == request.getMethod.toLowerCase && x.path == path + ).map { action => val loginAccount = request.getSession.getAttribute(Keys.Session.LoginAccount).asInstanceOf[Account] val systemSettings = loadSystemSettings() implicit val context = app.Context(systemSettings, Option(loginAccount), request) if(authenticate(action.security, context)){ - val result = action.function(request, response) + val result = action.function(request, response, context) result match { case x: String => renderGlobalHtml(request, response, context, x) case x: Html => renderGlobalHtml(request, response, context, x.toString) @@ -68,7 +70,7 @@ if(authenticate(action.security, context, repository)){ val result = try { PluginConnectionHolder.threadLocal.set(session.conn) - action.function(request, response, repository) + action.function(request, response, context, repository) } finally { PluginConnectionHolder.threadLocal.remove() }