Skip to content

Latest commit

 

History

History
92 lines (61 loc) · 3.22 KB

File metadata and controls

92 lines (61 loc) · 3.22 KB

@objectstack/plugin-security

Security plugin for ObjectStack — RBAC, Row-Level Security (RLS), and Field-Level Masking enforced transparently through the ObjectQL middleware chain.

npm License: Apache-2.0

Overview

plugin-security hooks into the ObjectQL pipeline and applies authorization on every read and write:

  1. Resolve permission sets — match user roles against SysPermissionSet metadata.
  2. Check object CRUDallowRead, allowCreate, allowEdit, allowDelete.
  3. Inject RLS — compile row-level policy expressions into query filters.
  4. Mask fields — remove non-readable fields from results; flag non-editable fields on writes.

System-context operations bypass checks so internal jobs, migrations, and seed scripts work unobstructed.

Installation

pnpm add @objectstack/plugin-security

Quick Start

import { ObjectKernel } from '@objectstack/core';
import { SecurityPlugin } from '@objectstack/plugin-security';

const kernel = new ObjectKernel();
kernel.use(new SecurityPlugin());
await kernel.bootstrap();

Key Exports

Export Kind Description
SecurityPlugin class Kernel plugin that installs the four-step security chain.
PermissionEvaluator class Evaluates object-level CRUD permissions across roles (most-permissive merge).
RLSCompiler class Compiles RLS expressions into ObjectQL filter AST.
FieldMasker class Strips non-readable fields and identifies non-editable ones.
SysRole, SysPermissionSet objects Metadata objects registered by the plugin.

System objects

The plugin contributes these system objects to the kernel:

Object Purpose
sys_role User role definitions.
sys_permission_set Bundles object and field permissions; can include RLS expressions.

Assignment tables (role ↔ user, role ↔ permission_set) are provided by @objectstack/plugin-auth when used together.

RLS expression language

RLS policies are authored in the same expression language as object validations. Example:

{
  "object": "project_task",
  "read": "owner_id = $user.id OR team_id in $user.team_ids"
}

Compilation output is a filter AST merged into every query's where clause, so drivers see it as a normal filter.

When to use

When not to use

  • ❌ Trusted single-user CLI scripts — disable per-request via the system context.

Related Packages

Links

License

Apache-2.0 © ObjectStack