Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/bjerkio/nestjs-oso

Simplify implementation of oso with NestJS.
https://github.com/bjerkio/nestjs-oso

decorator library nestjs oso register

Last synced: 26 days ago
JSON representation

Simplify implementation of oso with NestJS.

Awesome Lists containing this project

README

        

# NestJS OSO – Authorization code for NestJS

[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg?style=flat-square)](http://commitizen.github.io/cz-cli/)
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg?style=flat-square)](https://github.com/semantic-release/semantic-release)
![Release](https://github.com/bjerkio/nestjs-oso/workflows/Release/badge.svg)

[![codecov](https://codecov.io/gh/bjerkio/nestjs-oso/branch/main/graph/badge.svg)](https://codecov.io/gh/bjerkio/nestjs-oso)
[![Maintainability](https://api.codeclimate.com/v1/badges/85ecf3895e428d2c3064/maintainability)](https://codeclimate.com/github/bjerkio/nestjs-oso/maintainability)

> [oso][] is an open-source policy engine for authorization that’s embedded in
> your application. It provides a declarative policy language for expressing
> authorization logic. You define this logic separately from the rest of your
> application code, but it executes inside the application and can call directly
> into it.

`nestjs-oso` is a library that simplifies the implementation of [oso][] with
[NestJS][nest].

## Features

- **@OsoClass** decorator (automatically registers the class to use within Oso)
- **OsoService** (a ready to use NestJS service)

## Quickstart

```shell
β–Ά yarn add nestjs-oso oso
```

```typescript
import { Module } from '@nestjs/common';
import { OsoModule } from 'nestjs-oso';

@Module({
imports: [
OsoModule.forRoot({
loadFiles: ['./permissions.polar'],
// or multiple files
// loadFiles: ['./permissions.polar', './other-policies.polar'],
// or using wildcards
// loadFiles: ['./**/*.polar']
}),
],
})
export class AppModule {}
```

**Tip:** You don't have to apply either `loadFiles` or `loadStr`. You can inject
`OsoService` and access the original API for oso anytime!

### Example

You can easily inject `OsoService` to be used in your services, controllers,
etc.

```typescript
import { Injectable } from '@nestjs/common';
import { OsoService } from 'nestjs-oso';

@Injectable()
export class AuthService {
constructor(private oso: OsoService) {}
/*
Implementation that makes use of this.oso
*/
}
```

To register an class with `oso`, use the decorator:

```typescript
import { OsoClass } from 'nestjs-oso';

@OsoClass()
export class User {
id: string;
}
```

This will automatically be registered using `registerClass` function in `oso`.

### Add Polar files to `assets` in `nest-cli.json`

In the `nest-cli.json` file, we add the `assets` property to distribute non-Typescript
files and watchAssets to turn on watching all non-Typescript assets. In our case, we
probably want to add `*.polar` files to be automatically copied to the `dist` folder
and reloaded when changed.

You can find an example in [osohq/oso-nest-doc-mgmt](https://github.com/osohq/oso-nest-doc-mgmt/blob/main/nest-cli.json).

```json
{
"compilerOptions": {
"assets": ["**/*.polar"],
"watchAssets": true
}
}

```

## Contribute & Disclaimer

We love to get help πŸ™ Read more about how to get started in
[CONTRIBUTING](CONTRIBUTING.md) 🌳

[oso]: https://github.com/osohq/oso
[nest]: https://github.com/nestjs/nest