PermissionsFilter

Package: MachII.filters
Inherits from: framework.BaseComponent  <  framework.EventFilter
A robust EventFilter for testing that a user has the proper permissions to execute and event.
Method Summary
public void configure()
public boolean filterEvent(Event event, EventContext eventContext, [struct paramArgs="#StructNew()#"])
public any getUserPermissions()
private void throwUsageException()
public boolean validatePermissions(string requiredPermissions, string userPermissions)
Methods inherited from framework.EventFilter:   init
Methods inherited from framework.BaseComponent:   isParameterDefined , hasParameter , setProperty , announceEvent , getAppManager , setAppManager , setParameters , getParameters , getProperty , getParameter , setParameter
Method Detail
configure

public void configure( )

Parameters:

Code:

	<cffunction name="configure" access="public" returntype="void" output="false">
	</cffunction> 

filterEvent

public boolean filterEvent( Event event, EventContext eventContext, [struct paramArgs="#StructNew()#"] )

Parameters:
Event event
EventContext eventContext
[struct paramArgs="#StructNew()#"]

Code:

	<cffunction name="filterEvent" access="public" returntype="boolean" output="true">
		<cfargument name="event" type="MachII.framework.Event" required="true" />
		<cfargument name="eventContext" type="MachII.framework.EventContext" required="true" />
		<cfargument name="paramArgs" type="struct" required="false" default="#StructNew()#" />
		
		<cfset var isContinue = true />
		<cfset var requiredPermissions = '' />
		<cfset var invalidEvent = '' />
		<cfset var invalidMessage = '' />
		<cfset var clearEventQueue = '' />
		<cfset var userPermissions = '' />
		<cfset var newEventArgs = 0 />
				
		
		<cfif StructKeyExists(arguments.paramArgs,this.REQUIRED_PERMISSIONS_PARAM)>
			<cfset requiredPermissions = paramArgs[this.REQUIRED_PERMISSIONS_PARAM] />
		<cfelse>
			<cfset requiredPermissions = getParameter(this.REQUIRED_PERMISSIONS_PARAM,'') />
		</cfif>
		
		<cfif StructKeyExists(arguments.paramArgs,this.INVALID_EVENT_PARAM)>
			<cfset invalidEvent = paramArgs[this.INVALID_EVENT_PARAM] />
		<cfelse>
			<cfset invalidEvent = getParameter(this.INVALID_EVENT_PARAM,'') />
		</cfif>
		
		<cfif StructKeyExists(arguments.paramArgs,this.INVALID_MESSAGE_PARAM)>
			<cfset invalidMessage = paramArgs[this.INVALID_MESSAGE_PARAM] />
		<cfelse>
			<cfset invalidMessage = getParameter(this.INVALID_MESSAGE_PARAM,'') />
		</cfif>
		
		<cfif StructKeyExists(arguments.paramArgs,this.CLEAR_EVENT_QUEUE_PARAM)>
			<cfset clearEventQueue = paramArgs[this.CLEAR_EVENT_QUEUE_PARAM] />
		<cfelse>
			<cfset clearEventQueue = getParameter(this.CLEAR_EVENT_QUEUE_PARAM,true) />
		</cfif>
		
		
		<cfif NOT (requiredPermissions EQ '' OR invalidEvent EQ '')>
			<cfset userPermissions = getUserPermissions() />
			<cfset isContinue = validatePermissions(requiredPermissions, userPermissions) />
		<cfelse>
			<cfset throwUsageException() />
		</cfif>
		
		<cfif isContinue>
			
			<cfreturn true />
		<cfelse>
			
			<cfif clearEventQueue>
				<cfset arguments.eventContext.clearEventQueue() />
			</cfif>
			
			<cfset newEventArgs = arguments.event.getArgs() />
			<cfset newEventArgs[this.INVALID_MESSAGE_PARAM] = invalidMessage />
			<cfset arguments.eventContext.announceEvent(invalidEvent, newEventArgs) />
			
			<cfreturn false />
		</cfif>
	</cffunction> 

getUserPermissions

public any getUserPermissions( )

Parameters:

Code:

	<cffunction name="getUserPermissions" access="public" returntype="any">
		
		
		<cfif IsDefined('session.permissions')>
			<cfreturn session.permissions />
		<cfelse>
			<cfreturn '' />
		</cfif>
	</cffunction> 

throwUsageException

private void throwUsageException( )

Parameters:

Code:

	<cffunction name="throwUsageException" access="private" returntype="void" output="false">
		<cfset var throwMsg = "PermissionsFilter requires the following usage parameters: " & this.REQUIRED_PERMISSIONS_PARAM & ", " & this.INVALID_EVENT_PARAM & "." />
		<cfthrow message="#throwMsg#" />
	</cffunction> 

validatePermissions

public boolean validatePermissions( string requiredPermissions, string userPermissions )

Parameters:
string requiredPermissions
string userPermissions

Code:

	<cffunction name="validatePermissions" access="public" returntype="boolean">
		<cfargument name="requiredPermissions" type="string" required="true" />
		<cfargument name="userPermissions" type="string" required="true" />
		
		<cfset var isValidated = true />
		<cfset var permission = 0 />
		
		<cfloop index="permission" list="#requiredPermissions#" delimiters=",">
			<cfif NOT ListContainsNoCase(arguments.userPermissions,permission)>
				<cfset isValidated = false />
			</cfif>
		</cfloop>
		
		<cfreturn isValidated />
	</cffunction>