Skip to content

Commit 0bef69a

Browse files
authored
Merge pull request #21 from michaelborn/patch/module-settings-rules-source-load
feat: Add support for JSON/XML/model rules source when loading rules …
2 parents 2760b93 + c63046a commit 0bef69a

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

interceptors/Security.cfc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,20 @@ component accessors="true" extends="coldbox.system.Interceptor" {
9999
param arguments.settings.defaultAuthorizationAction = "";
100100
param arguments.settings.validator = "";
101101

102+
// Verify setting configurations
103+
variables.rulesLoader.rulesSourceChecks( arguments.settings );
104+
102105
// Store configuration in this firewall
103106
variables.securityModules[ arguments.module ] = arguments.settings;
104107

105108
// Process Module Rules
106109
arguments.settings.rules = variables.rulesLoader.normalizeRules( arguments.settings.rules, module );
107110

111+
// Load Rules if we have a ruleSource
112+
if ( arguments.settings.rulesSource.len() ) {
113+
arguments.settings.rules = variables.rulesLoader.loadRules( arguments.settings );
114+
}
115+
108116
// prepend them so the don't interfere with MAIN rules
109117
// one by one as I don't see a way to prepend the whole array at once
110118
for ( var i = arguments.settings.rules.len(); i >= 1; i-- ){

test-harness/tests/specs/unit/SecurityTest.cfc

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,55 @@ component extends="coldbox.system.testing.BaseInterceptorTest" interceptor="cbse
204204

205205
expect( security.getProperty( "rules", [] ) ).toHaveLength( 1 );
206206
} );
207-
} );
207+
} );
208+
209+
describe( "module setting load", function() {
210+
beforeEach( function(currentSpec){
211+
settings.rules = [];
212+
settings.validator = "tests.resources.security";
213+
security.$property( propertyName = "securityModules", mock = {} );
214+
security.$property( propertyName = "log", mock = { info : function() {} });
215+
security
216+
.$( "getInstance" )
217+
.$args( settings.validator )
218+
.$results( wirebox.getInstance( settings.validator ) );
219+
security.setProperties( settings );
220+
} );
221+
222+
it( "can load JSON Rules based on module settings", function(){
223+
expect( security.getProperty( "rules", [] ) ).toHaveLength( 0 );
224+
var source = expandPath( "/tests/resources/security.json.cfm" );
225+
mockController.$( "locateFilePath", source );
226+
227+
// initiate cbSecurity's module registration rule parsing
228+
security.registerModule( "myTestModule", { rules : source } );
229+
230+
expect( security.getProperty( "rules", [] ) ).toHaveLength( 2 );
231+
} );
232+
233+
it( "can load XML Rules based on module settings", function(){
234+
var source = expandPath( "/tests/resources/security.xml.cfm" );
235+
mockController.$( "locateFilePath", source );
236+
237+
// initiate cbSecurity's module registration rule parsing
238+
security.registerModule( "myTestModule", { rules : source } );
239+
240+
expect( security.getProperty( "rules", [] ) ).toHaveLength( 3 );
241+
} );
242+
243+
it( "can load model Rules based on module settings", function(){
244+
var moduleSettings = {
245+
rules : "model",
246+
rulesModel : "tests.resources.security",
247+
rulesModelMethod: "getSecurityRules"
248+
};
249+
250+
// initiate cbSecurity's module registration rule parsing
251+
security.registerModule( "myTestModule", moduleSettings );
252+
253+
expect( security.getProperty( "rules", [] ) ).toHaveLength( 1 );
254+
} );
255+
});
208256

209257
} );
210258
}

0 commit comments

Comments
 (0)