Interface GlobalContext

  • All Known Implementing Classes:
    DefaultGlobalContext

    public interface GlobalContext

    A custom SubjectMapper can call one of the get() methods of this interface to access data that is common all subject mappers. The DefaultGlobalContext class implements this interface and is deployed at the Permissioning Auth Module.

    A PermissioningDataSource adds data to the GlobalContext by calling updateGlobalContext() as part of a transaction, and a reference to the GlobalContext is passed to a SubjectMapper when the SubjectMapper is created. This allows a custom SubjectMapper to map subjects based on GlobalContext data, and not just on subject mappings defined for the User.

    For example, if a custom SubjectMapper uses FX rates to map a subject, it is a more efficient use of memory and bandwidth to add these rates to the GlobalContext than to the subject mappings of every User.

    You can also write a custom class that implements the GlobalContext interface, or extend the DefaultGlobalContext to provide additional methods that a custom SubjectMapper can call. For example, a custom implementation of GlobalContext could provide complex objects that would otherwise require multiple get() calls to the DefaultGlobalContext. Another example is a custom implementation that provides the same complex object to several subject mappers, reducing the processing required by each.

    If you write a custom GlobalContext, the class must be available on a classpath of the Permissioning Auth Module. It does not need to be deployed on a classpath of the PermissioningDataSource, as the PermissioningDataSource never loads the GlobalContext.

    The document Permissioning 6.0: How To Create A Permissioning Adapter describes how to write, deploy, and configure a custom GlobalContext, and is included in the Permissioning DataSource kit.

    The Global Context and Multiple Permissioning DataSources

    Note that there is only one GlobalContext at the Permissioning Auth Module, either the DefaultGlobalContext or a custom GlobalContext, and it is shared by every PermissioningDataSource. Therefore if you have more than one PermissioningDataSource, make sure they do not overwrite each other's data.

    Thread Safety: Methods of the GlobalContext will never be called concurrently with any SubjectMapper method, and no GlobalContext method will ever be called concurrently with another GlobalContext method. Therefore there are no concurrency issues when implementing a custom GlobalContext.

    • Method Summary

      All Methods Instance Methods Abstract Methods 
      Modifier and Type Method Description
      java.util.Map<java.lang.String,​java.lang.String> get​(java.lang.String identifier)
      Returns the Map of key-value pairs that are saved for the passed in identifier.
      java.lang.String get​(java.lang.String identifier, java.lang.String key)
      Returns the value that is saved for the passed in identifier and key.
      void remove​(java.lang.String identifier)
      Removes from the GlobalContext, the passed in identifier and the Map of key-value pairs for that identifier.
      void update​(java.lang.String identifier, java.util.Map<java.lang.String,​java.lang.String> data)
      Saves the passed in identifier and data, and makes the data available to the get() methods of this interface.
    • Method Detail

      • update

        void update​(java.lang.String identifier,
                    java.util.Map<java.lang.String,​java.lang.String> data)

        Saves the passed in identifier and data, and makes the data available to the get() methods of this interface.

        The method is called by the Permissioning Auth Module when data for the GlobalContext is received from a PermissioningDataSource. A PermissioningDataSource sends the identifier and data to the Permissioning Auth Module when it calls updateGlobalContext() as part of a transaction.

        Parameters:
        identifier - A String that identifies the passed in data.
        data - a Map of key-value pairs for the passed in identifier.
      • get

        java.util.Map<java.lang.String,​java.lang.String> get​(java.lang.String identifier)

        Returns the Map of key-value pairs that are saved for the passed in identifier. This method is typically called by the mapSubject() method of a custom SubjectMapper.

        Parameters:
        identifier - a String that identifies the Map to be returned.
        Returns:
        the Map of key-value pairs for the passed in identifier, or null if no Map has been saved for this identifier.
      • get

        java.lang.String get​(java.lang.String identifier,
                             java.lang.String key)

        Returns the value that is saved for the passed in identifier and key. This method is typically called by the mapSubject() method of a custom SubjectMapper.

        A call to this method is equivalent to calling get(String), and then calling get(key) on the returned Map of key-value pairs.

        Parameters:
        identifier - A String that identifies the Map of key-value pairs.
        key - A key that identifies the value to be returned.
        Returns:
        the value that is saved for the passed in identifier and key, or null if no value has been saved for this identifier and key.
      • remove

        void remove​(java.lang.String identifier)

        Removes from the GlobalContext, the passed in identifier and the Map of key-value pairs for that identifier. This method is called by the Permissioning Auth Module when a PermissioningDataSource calls removeGlobalContextData() as part of a transaction.

        The method does not remove any data from the GlobalContext if there is no Map for this identifier.

        Parameters:
        identifier - A String that identifies the Map to be removed.