RestAuth v2.0.0 RestAuth.CacheService View Source

Generic caching service to be used by the user implemented handler module.

Most functions from the handler should use the cache service for best performance and behaviour.

The data is cached in ETS tables. The service expects a homogeneous node setup where each node has a process called Elixir.RestAuth.CacheService that can be used for communication. All writes are dispatched through all the nodes using GenServer.multi_call/4, while reads are dirty from the local ETS table. Using this cache without nodes being connected will leave you unable to invalidate acl or kill off user sessions.

The name of the server can be customized using the :cache_service_name application environment configuration.

Link to this section Summary

Functions

Looks up in the cache if a user can access an item in the system

Returns a specification to start this module under a supervisor

Clears all the caches

Looks up a user in the cache based on the authority

Invalidates an authority based on the set user_id and token

Invalidates all authorities for a given user_id

Invalidates all access records for a given user_id in a RestAuth.Authority

Synchronously puts a user in the cache

Sets user access for a user_id, category and target_id in the caching layer

Link to this section Types

Link to this type target_id() View Source
target_id() :: any

Link to this section Functions

Link to this function can_user_access?(authority, category, target_id) View Source
can_user_access?(RestAuth.Authority.t, category, target_id) ::
  :not_found |
  boolean

Looks up in the cache if a user can access an item in the system.

Returns a boolean or :not_found if no information is found in the cache.

Returns a specification to start this module under a supervisor.

See Supervisor.

Link to this function clear() View Source
clear() :: {:ok, non_neg_integer} | {:error, [Node.t]}

Clears all the caches.

On success returns the count of nodes written to, on failure the list of nodes with failed writes.

Link to this function get_user(authority) View Source
get_user(RestAuth.Authority.t) ::
  :not_found |
  {:ok, RestAuth.Authority.t}

Looks up a user in the cache based on the authority.

Requires :user_id and :token fields to be set in the authority struct.

Link to this function invalidate_token(authority) View Source
invalidate_token(RestAuth.Authority.t) ::
  {:ok, non_neg_integer} |
  {:error, [Node.t]}

Invalidates an authority based on the set user_id and token.

On success returns the count of nodes written to, on failure the list of nodes with failed writes.

Link to this function invalidate_user(authority) View Source
invalidate_user(RestAuth.Authority.t) ::
  {:ok, non_neg_integer} |
  {:error, [Node.t]}

Invalidates all authorities for a given user_id.

On success returns the count of nodes written to, on failure the list of nodes with failed writes.

Link to this function invalidate_user_access(authority) View Source
invalidate_user_access(RestAuth.Authority.t) ::
  {:ok, non_neg_integer} |
  {:error, [Node.t]}

Invalidates all access records for a given user_id in a RestAuth.Authority.

On success returns the count of nodes written to, on failure the list of nodes with failed writes.

Link to this function put_user(auth) View Source
put_user(RestAuth.Authority.t) ::
  {:ok, non_neg_integer} |
  {:error, [Node.t]}

Synchronously puts a user in the cache.

The call is synchronous to limit concurrent updates from multiple nodes.

On success returns the count of nodes written to, on failure the list of nodes with failed writes.

Link to this function put_user_access(authority, category, target_id, allowed?) View Source
put_user_access(RestAuth.Authority.t, category, target_id, boolean) ::
  {:ok, non_neg_integer} |
  {:error, [Node.t]}

Sets user access for a user_id, category and target_id in the caching layer.

On success returns the count of nodes written to, on failure the list of nodes with failed writes.