Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/thearchitector/casbin-tortoise-adapter
A Casbin <=> Tortoise ORM dynamic policy adapter for PyCasbin
https://github.com/thearchitector/casbin-tortoise-adapter
access-control asyncio authorization casbin pycasbin tortoise-orm
Last synced: 27 days ago
JSON representation
A Casbin <=> Tortoise ORM dynamic policy adapter for PyCasbin
- Host: GitHub
- URL: https://github.com/thearchitector/casbin-tortoise-adapter
- Owner: thearchitector
- License: apache-2.0
- Created: 2021-07-19T07:17:55.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2023-12-31T16:40:47.000Z (about 1 year ago)
- Last Synced: 2024-05-02T03:09:08.832Z (8 months ago)
- Topics: access-control, asyncio, authorization, casbin, pycasbin, tortoise-orm
- Language: Python
- Homepage:
- Size: 117 KB
- Stars: 15
- Watchers: 3
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# 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 Tortoisefrom 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.