Project structure
The recommended project structure is to start with a kilpi
directory in your project’s source directory, containing the Kilpi instance and the policies and subject definitions.
Directorysrc
Directorykilpi
- policies.ts // Define your policies here
- subject.ts // Define your subject here
- kilpi.ts // Create and export your Kilpi instance here
Larger projects
As your project grows, you may start extracing policies into their own files, e.g. with a policies
directory or with a feature-based architecture.
You would then import these policies in a policies.ts
file or directly in your kilpi.ts
file.
import { createKilpi } from '@kilpi/core';import { organizationPolicies } from './policies/organizations.policies';import { documentPolicies } from './policies/documents.policies';import { mediaPolicies } from './policies/media.policies';
export const Kilpi = createKilpi({ policies: { organizations: organizationPolicies, documents: documentPolicies, media: mediaPolicies, }, // ...})
policies
directory
If you’d like to keep your policies centralized, but separate them by domain, you can create a policies
directory in your kilpi
directory.
Directorysrc
Directorykilpi
Directorypolicies
- organizations.policies.ts
- documents.policies.ts
- media.policies.ts
- policies.ts // optional
- subject.ts
- kilpi.ts
Feature-based architecture
Alternatively, if you’d like to keep your policies defined close to where they are consumed, you can use the following feature-based folder structure.
Directorysrc
Directoryfeatures
Directorykilpi
- subject.ts
- kilpi.ts
- policies.ts // optional
Directoryorganizations
- …
- organizations.policies.ts
Directorymedia
- …
- media.policies.ts
Directorydocuments
- …
- documents.policies.ts
Using a feature-based folder structure is recommended for all applications, however even in a feature-based folder structure you may opt to use a
policies
directory to keep your policies centralized.