Skip to content

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.

kilpi.ts
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.