Cool, pass it along when you can. Have you checked out AppBooster for Mach-II as a starting point?
.Peter Sumit Verma said the following on 09/14/2009 06:24 PM: > Yes, please feel free to use the content here for the wiki. > > So basically, to set a global plugin like web app firewall that needs > to run first, when runParent is set to "none" in module, I would > create a place holder plugin in the module config. Then, in the base > config, during module declaration, "replace/inject" the place holder > with a base plugin. > > runOnChild would have been easier, but from your answer I understand > it won't work as plugins run in the order they are defined. > > I'm new to Mach-II and trying to get my head around the whole project > setup and structure. I'm working on creating a sample app with basic > setup of a back-end (admin) and front-end. I will e-mail you that in > few days for review and if appropriate you can use that for wiki as well. > > I have another question about a different issue, but I will send a new > message so it's easier to track. > > > On Mon, Sep 14, 2009 at 1:22 PM, Peter J. Farrell <[email protected] > <mailto:[email protected]>> wrote: > > Answers inline below. Would you mind if I used your question and > sample use case for entry on the wiki? > > Sumit Verma said the following on 09/12/2009 11:12 PM: >> Hi Peter, >> >> Is there a way to set runParent attribute to individual plugin? > No, plugins are a cross-cutting concern and it would be imprudent > (and really messy) to allow some plugins to run in certain > circumstances and not in others. However, there is a solution to > the use case you describe. > >> Here is a simple use case: >> >> • A web application firewall set up as a base plugin should by >> default process each request, even inside modules. >> >> • A session handling plugin should only run on the base >> application (front end). >> >> • An access check / security plugin should run only inside module >> (let's say when admin is set up as a module). >> >> So, in this case if we set runParent to none inside the admin >> module, it will disable session handling (good), but it will also >> disable web app firewall (bad). >> >> I know we can always run the web app firewall in Application.cfc >> and it will run on each request, but I'm sure there will be other >> cases where we would like to use the plugin. >> >> I think it might be good to have an attribute called >> runOnChild="before|after|none|always" that can be set on >> individual plugin. > > First, there is a known defect right now that stopping the > solution I will outline below from working: > > http://greatbiztoolsllc.trac.cvsdude.com/mach-ii/ticket/194 > > This will be fixed in Mach-II 1.8 soon (it affects 1.5, 1.6.0 and > 1.6.1). > > Basically, you will set the runParent="none" and pull in the > plugin you want using the overrideAction and/or mapping > attribute. These attributes are documented in the XML > Configuration File reference entry on the wiki. > > Snip in module: > <plugins runParent="none"> > <plugin name="security" type="MachII.plugins.SimplePlugin /> > ... other plugins... > </plugins> > > In parent using override XML when defining the module: > <module name="foo" file="./path/to/mach-ii_foo.xml"> > <mach-ii> > <plugins> > <plugin name="security" overrideAction="addFromParent"/> > </plugins> > </mach-ii> > </module> > > This adds the "security" plugin from the parent into the module > with the name of "security". Remember that plugins are run in the > order they are defined, since I want my "security" plugin to be > run first -- I added a placeholder in the module to replace. > Otherwise you could do away with that "SimplePlugin" placeholder > and the override XML will append the plugin -- therefore the > security plugin would be the last plugin to run in the module. Of > course, you still have to have the "security" plugin defined in > the base application so you can use the overrideAction to add it > to the module. > > If you want to use a plugin with different name in the parent, > that is fine but you need to use the mapping attribute: > > Snip in module: > <plugins runParent="none"> > <plugin name="security" type="MachII.plugins.SimplePlugin /> > ... other plugins... > </plugins> > > In parent using override XML: > > <module name="foo" file="./path/to/mach-ii_foo.xml"> > <mach-ii> > <plugins> > <plugin name="security" overrideAction="addFromParent" > mapping="crazyFooBarName" /> > </plugins> > </mach-ii> > </module> > > This pulls in a plugin named "crazyFooBarName" from the parent > into the module and replaces "security" plugin placeholder. Of > course, you still have to a plugin named "crazyFooBarName" in the > base application (parent). > > Again, there is a known ticket right now that stops this from > working right now and this will be fixed soon. > > Best, > .Peter > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to Mach-II for CFML list. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/mach-ii-for-coldfusion?hl=en SVN: http://greatbiztoolsllc.svn.cvsdude.com/mach-ii/ Wiki / Documentation / Tickets: http://greatbiztoolsllc.trac.cvsdude.com/mach-ii/ -~----------~----~----~----~------~----~------~--~---
