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.
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
.
Modifier and Type | Method and 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. |
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.
identifier
- A String
that identifies the passed in data
.data
- a Map
of key-value pairs for the passed in identifier
.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
.
identifier
- a String
that identifies the Map
to be returned.Map
of key-value pairs for the passed in identifier
, or null
if no Map
has been saved for this 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
. 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.
identifier
- A String
that identifies the Map
of key-value pairs.key
- A key
that identifies the value to be returned.identifier
and key
, or null
if no value has been saved for this 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
. 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
.
identifier
- A String
that identifies the Map
to be removed.Please send bug reports and comments to Caplin support