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()

This configure does nothing.

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

Runs the filter event.

public any getUserPermissions()

Checks if user permissions is defined.

private void throwUsageException()

Throws an usage exception.

public boolean validatePermissions(string requiredPermissions, string userPermissions)

Validates if required permissions exists in the user's permissions.

Methods inherited from framework.EventFilter:   init
Methods inherited from framework.BaseComponent:   setParameters , hasParameter , buildUrlToModule , isParameterDefined , buildUrl , announceEventInModule , setAppManager , getParameter , getProperty , getParameters , setProperty , getPropertyManager , bindValue , getAppManager , setParameter , announceEvent
Method Detail
configure

public void configure( )

This configure does nothing.

Parameters:

Code:

	<cffunction name="configure" access="public" returntype="void" output="false"
		hint="This configure does nothing.">
		
	</cffunction> 

filterEvent

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

Runs the filter event.

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

Code:

	<cffunction name="filterEvent" access="public" returntype="boolean" output="true"
		hint="Runs the filter event.">
		<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( )

Checks if user permissions is defined.

Parameters:

Code:

	<cffunction name="getUserPermissions" access="public" returntype="any"
		hint="Checks if user permissions is defined.">
		
		
		<cfif IsDefined('session.permissions')>
			<cfreturn session.permissions />
		<cfelse>
			<cfreturn '' />
		</cfif>
	</cffunction> 

throwUsageException

private void throwUsageException( )

Throws an usage exception.

Parameters:

Code:

	<cffunction name="throwUsageException" access="private" returntype="void" output="false"
		hint="Throws an usage exception.">
		<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 )

Validates if required permissions exists in the user's permissions.

Parameters:
string requiredPermissions
string userPermissions

Code:

	<cffunction name="validatePermissions" access="public" returntype="boolean"
		hint="Validates if required permissions exists in the user's permissions.">
		<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>