Developing Security Checkpoints

This document describes how a developers and designers should work with implementations of new Security Checkpoints.

Security Checkpoints: each checkpoint has an identifier "Checkpoint Id", a description, and a message.

Contents

See also

Checkpoint Id: Naming conventions

All "Checkpoint Id" should be prefixed by DOMAIN. In most cases, DOMAIN is the IFS component in which the checkpoint resides, such as SINWOF or DOCMAN.

Possible exceptions: Exceptions are not recommended, stick to the basic rule if possible! But it may be necessary to have a broader domain such as GENERAL or SECURITY, if implementing one security checkpoint which is supposed to affect several components.

The "Checkpoint Id" suffix should be a short but reasonably understandable English name of the functionality affected by the checkpoint. Abbreviations are allowed. Examples of suffixes are _INVOICE_AUTHORIZING, _APPROVE_STEP etc etc which within their specified DOMAIN are unique and easy to comprehend what they do.

Description

This field is a humanly readable description of the checkpoint does. The description exists mainly to help system configuration technicians setup Security Checkpoints, so the description should be written to be understandable by a system technician or application consultant with limited or no understanding of development specifics.

It is a good idea to have the most important information early in the description. This helps system configuration technicians as the information often is viewed as a list with just a small part of the description shown.

Message

The primary purpose of the message is to provide useful information to system administrators who are managing the Security Checkpoint log

It is possible to include parameters from the PL/SQL application logic into the message. This is including &PARAMETER in the message text, which will insert the parameter named PARAMETER. Please do use this functionality to add important information to the log, for example invoice numbers, document numbers, customer number or whatever information is important to accurately document what business information was modified when the checkpoint was passed.

A rather good example of a message is "Person &PERSON_ID approved Document Revision &DOC_CLASS-&DOC_NO-&DOC_SHEET-&DOC_REV". The message explains what has occurred (a document was "approved") and what business object (in this case, a document revision identified by &DOC_CLASS-&DOC_NO-&DOC_SHEET-&DOC_REV) was affected. So, an administrator reading the log will easily understand it!

Tips! Avoid including text such as ”checkpoint”, ”gate”, ”authentication”, ”password” etc in the message, as it is redundant text which is common for every single security checkpoint. Also avoid including the Foundation1 username or the transaction date; this information is always added to each log entry.

PL/SQL Implementation

Inserting Security Checkpoint into a business flow

An Application / Business Analyst should determine where a security checkpoint is needed business wise. Designers are encourage to specify where in the code the changes should be implemented, as it may not always be trivial to determine.

The code added into PL/SQL to call a security checkpoint is pretty straight forward. Fist, create a message of type 'SECURITY_CHECKPOINT'. Add parameters to the message, to enable the design of good log entries. Finally, call Security_Sys.Security_Checkpoint with the name of the checkpoint and the 'SECURITY_CHECKPOINT' message.

DECLARE
   Gate_Msg_ VARCHAR2(2000);
BEGIN
   Gate_Msg_ := Message_Sys.Construct('SECURITY_CHECKPOINT');
   Message_Sys.Set_Attribute(Gate_Msg_, 'PERSON_ID', Person_Info_Api.Get_Id_For_User(Fnd_Session_API.Get_Fnd_User));
   Message_Sys.Set_Attribute(Gate_Msg_, 'DOC_CLASS', rec_.doc_class);
   Message_Sys.Set_Attribute(Gate_Msg_, 'DOC_NO', rec_.doc_no);
   Message_Sys.Set_Attribute(Gate_Msg_, 'DOC_SHEET', rec_.doc_sheet);
   Message_Sys.Set_Attribute(Gate_Msg_, 'DOC_REV', rec_.doc_rev);
   Security_Sys.Security_Checkpoint('DOCMAN_DOC_REV_SET_TO_APPROVED', Gate_Msg_);
END;

 

Registering a Security Checkpoint in a .ins file

Registering a security checkpoint includes defining the default Description, default Message and specifying which Parameters are allowed. Example bellow:

-----------------------------------------------------------------------------
-- Registering Security Checkpoints
-----------------------------------------------------------------------------
PROMPT =======> Registering Security Checkpoint Gate "DOCMAN_DOC_REV_SET_TO_APPROVED"
DECLARE
   Gate_Id_  VARCHAR2(1000) := 'DOCMAN_DOC_REV_SET_TO_APPROVED';
   Info_Msg_ VARCHAR2(32000) := '';
   Par_Msg_  VARCHAR2(32000) := '';
BEGIN
   -- Construct Main Message
   Info_Msg_ := Message_Sys.Construct('GATE');
   Message_Sys.Add_Attribute(Info_Msg_, 'DESCRIPTION', 'Used when approving a Document Revision');
   Message_Sys.Add_Attribute(Info_Msg_, 'MESSAGE', 'Person &PERSON_ID approved Document Revision &DOC_CLASS-&DOC_NO-&DOC_SHEET-&DOC_REV');
   Message_Sys.Add_Attribute(Info_Msg_, 'ACTIVE_DB', 'TRUE');
   -- Adding parameters
   -- Construct Parameter Message
   Par_Msg_ := Message_Sys.Construct('PARAMETERS');
   Message_Sys.Add_Attribute(Par_Msg_, 'FNDUSER', 'STRING');
   Message_Sys.Add_Attribute(Par_Msg_, 'PERSON_ID', 'STRING');
   Message_Sys.Add_Attribute(Par_Msg_, 'DOC_CLASS', 'STRING');
   Message_Sys.Add_Attribute(Par_Msg_, 'DOC_NO', 'STRING');
   Message_Sys.Add_Attribute(Par_Msg_, 'DOC_SHEET', 'STRING');
   Message_Sys.Add_Attribute(Par_Msg_, 'DOC_REV', 'STRING');
   -- Add Parameters message to main message
   Message_Sys.Add_Attribute(Info_Msg_, 'PARAMETERS', Par_Msg_);
   -- Register Security Checkpoint Gate
   Sec_Checkpoint_Gate_Api.Register(Gate_Id_, Info_Msg_);
END;

Additional concerns specific to IFS Web Client

Please read Security Checkpoint – Web Client considerations if implementing a Security Checkpoint which will affect IFS Web Client functionality. Because a web interface is less "controlled" than a thick client, there are some limitations with the web implementation. You as a developer must adapt to these limitations when developing a security checkpoint which will affect IFS Web Client.