System Projects Reference > Situational Awareness System Projects > Situational Awareness Include Project > GetPrivEx

GetPrivEx

Checks if the current user has the required privilege for a specified area and a specified piece of equipment.

If you have specific additional security requirements per equipment, you can set the default '_CALLBACK_EquipmentSecurity' label to a custom function of your own so that it will be called in addition to the default security check. The current default function is "DefaultEquipmentSecurityCallback".

The '_CALLBACK_EquipmentSecurity' label is set by default in the SA_Style1_MultiRes starter project. To view go to Standards | Labels.

Note: The default callback function does not use the sOperation or sArg fields.

Syntax

GetPrivEx(INT nPriv, INT nArea [, STRING sEquipment [, STRING sOperation [, STRING sArg]]])

nPriv

The privilege level - 0 to 8.

nArea

The area of privilege - 0 to 255.

sEquipment

Equipment reference in which you are interested. It does not need to be in the same area. This is an optional parameter.

sOperation

The reason for privilege request. This is an optional parameter.

sArg

Custom argument to be passed to callback function, which is defined by its caller. This is an optional parameter.

Return Value

Returns 1 if the user has the specified privilege in the area, or 0 (zero) if the user does not have the privilege.

Example

Example below outlines using a custom function to determine if the user can bypass or removebypass when working with interlocks.

// Extended callback that supports interlocks context
GLOBAL STRING g_sInterlockBypassOperation = "Interlock.Bypass";               // Interlock Bypass Operation
GLOBAL STRING g_sInterlockRemoveBypassOperation = "Interlock.RemoveBypass";  // Interlock Remove Bypass Operation

PUBLIC
			
INT
			
FUNCTION CustomSecurityCallback(INT nPriv, INT nArea, STRING sEquipment, STRING sOperation, STRING sArg)
	STRING sCategory; 
	STRING sInterlockingItem;
	INT nResult = 1;
	sCategory = Interlocks_GetSecurityCallbackCategory(sArg);
	SinterlockingItem = Interlocks_GetSecurityCallbackReferencedItem(sArg);

	TraceMsg("Interlocks CustomSecurityCallback: " + sEquipment + "/" + sArg + "/" + sOperation + "/" + sCategory + "/" + sInterlockingItem);

	IF (sOperation = g_sInterlockBypassOperation) THEN
		TraceMsg(sInterlockingItem + " in interlock category " + sCategory + " is being bypassed for " + sEquipment);
        
		// Don't allow bypass for 'GuestEngineer'
		IF Name() = "GuestEngineer" THEN
			nResult = 0;
		END
		ELSE 
		   IF (sOperation = g_sInterlockRemoveBypassOperation) THEN
		   	   TraceMsg(sInterlockingItem + " in interlock category " + sCategory + " is removing bypass for " + sEquipment);
        
				// Don't allow removebypass for 'GuestManager'
				IF Name() = "GuestManager" THEN
					nResult = 0;
				END
		   END
		END 

	RETURN nResult;
END
		

Published June 2018