Metadata-Version: 2.1
Name: casbin-tortoise-adapter
Version: 2.0.0
Summary: Tortoise ORM adapter for AsyncCasbin
Keywords: casbin asyncio access control Tortoise ORM authorization pycasbin
Author-Email: Elias Gabriel <me@eliasfgabriel.com>
License: Apache-2.0
Project-URL: Repository, https://github.com/thearchitector/casbin-tortoise-adapter
Project-URL: Documentation, https://github.com/thearchitector/casbin-tortoise-adapter#tortoise-orm-adapter-for-asynccasbin
Project-URL: Changelog, https://github.com/thearchitector/casbin-tortoise-adapter/blob/main/CHANGELOG.md
Requires-Python: <4.0,>=3.7
Requires-Dist: tortoise-orm[accel]>=0.18.0
Requires-Dist: casbin>=1.34.0
Description-Content-Type: text/markdown

# Tortoise ORM Adapter for PyCasbin

![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/thearchitector/casbin-tortoise-adapter/ci.yaml?label=tests&style=flat-square)
![PyPI - Downloads](https://img.shields.io/pypi/dm/casbin-tortoise-adapter?style=flat-square)
![GitHub](https://img.shields.io/github/license/thearchitector/casbin-tortoise-adapter?style=flat-square)
[![Buy a tree](https://img.shields.io/badge/Treeware-%F0%9F%8C%B3-lightgreen?style=flat-square)](https://ecologi.com/eliasgabriel?r=6128126916bfab8bd051026c)

This is an asynchronous adapter for [pycasbin](https://pypi.org/project/casbin) using Tortoise ORM.

Supports Python 3.7+.

## Installation

```sh
python3 -m pip install --user casbin-tortoise-adapter
# or via your favorite dependency manager, like PDM
```

The current supported databases are [limited by Tortoise ORM](https://tortoise.github.io/databases.html).

## Documentation

The only configurable is the underlying Model used by `TortoiseAdapter`. While simple, it should be plenty to cover most use cases that one could come across. You can change the model by passing the `modelclass: CasbinRule` keyword argument to the adapter and updating the model in your Tortoise ORM init configuration.

The `modelclass` value must inherit from `casbin_tortoise_adapter.CasbinRule` to ensure that all the expected fields are present. A `TypeError` will throw if this is not the case.

A custom Model, combined with advanced configuration like show in the Tortoise ORM ["Two Databases" example](https://tortoise.github.io/examples/basic.html#two-databases), allow you to change where your authorization rules are stored (database, model name, etc.)

## Basic example

```python
from casbin import AsyncEnforcer
from tortoise import Tortoise

from casbin_tortoise_adapter import CasbinRule, TortoiseAdapter

async def main()
    # connect to db and generate schemas
    await Tortoise.init(
        db_url="postgres://postgres:password@test-db:5432/my_app",
        modules={"models": ["casbin_tortoise_adapter"]},
    )
    await Tortoise.generate_schemas()

    adapter = casbin_tortoise_adapter.TortoiseAdapter()
    e = AsyncEnforcer('path/to/model.conf', adapter)

    sub = "alice"  # the user that wants to access a resource.
    obj = "data1"  # the resource that is going to be accessed.
    act = "read"  # the operation that the user performs on the resource.

    if e.enforce(sub, obj, act):
        # permit alice to read data1
        pass
    else:
        # deny the request, show an error
        pass
```

### License

This project, like other adapters, is licensed under the [Apache 2.0 License](LICENSE).

This package is [Treeware](https://treeware.earth). If you use it in production, then we ask that you [**buy the world a tree**](https://ecologi.com/eliasgabriel?r=6128126916bfab8bd051026c) to thank us for our work. By contributing to my forest you’ll be creating employment for local families and restoring wildlife habitats.
