FileSystemDal Overview

The FileSystemDal is a simple wrapper on the Suplex.Security.DataAccess.MemoryDal, which is an in-memory Suplex store. The FileSystemDal adds serialize/deserialize methods to support persistence.

Key Properties

Field/Method Type Required Description
CurrentPath string Yes Path for serialize/deserialize actions.
AutomaticallyPersistChanges bool Yes Indicates whether to automatically serialize the store to the CurrentPath when changes occur. Default is false.
SerializeAsJson bool Yes Indicates whether the store will serialize as JSON or YAML (default). Default is false.

Key Methods

Type Method Return Value Description
Instance ToYaml(bool serializeAsJson = false) string Serializes the store to YAML, or optionally to JSON.
Instance ToYamlFile(string path = null, bool serializeAsJson = false) void Serializes the store to YAML, or optionally to JSON, and persists the result to a file. If path is not provided, CurrentPath is assumed. If path is provided, it will override and reset CurrentPath.
Instance FromYaml(string yaml) void Deserializes a YAML or JSON string blob and initializes a new store.
Static LoadFromYaml(string yaml) FileSystemDal Deserializes a YAML or JSON string blob and initializes a new store.
Instance FromYamlFile(string path) void Deserializes a YAML or JSON file and initializes a new store.
Static LoadFromYamlFile(string path) FileSystemDal Deserializes a YAML or JSON file and initializes a new store.

Rationale for a File Store

Security configuration data tends to be very slow moving, by nature. Often times there is a flurry of setup activity followed by long periods of stability. If you don't otherwise require User/Group information to be in your application database, a simple strategy for Suplex integration is to use the FileSystemDal coupled with a FileSystemWatcher, where edits to the file are handled externally from the WPF UI. See the SampleApp for an example of this approach.

If your store experiences a high volume of changes or you otherwise require access to SecurityPrincipal data for joins/etc., consider a database DAL implementation, such as the DynamoDbDal or MongoDbDal.