Skip to main content

Asynchronous SQLAlchemy Adapter for PyCasbin

Project description

async-sqlalchemy-adapter

GitHub Actions Coverage Status Version PyPI - Wheel Pyversions Download License

Asynchronous SQLAlchemy Adapter is the SQLAlchemy adapter for PyCasbin. With this library, Casbin can load policy from SQLAlchemy supported database or save policy to it.

Based on Officially Supported Databases, The current supported databases are:

  • PostgreSQL
  • MySQL
  • MariaDB
  • SQLite
  • Oracle
  • Microsoft SQL Server
  • Firebird

Installation

pip install casbin_async_sqlalchemy_adapter

Simple Example

import casbin_async_sqlalchemy_adapter
import casbin

adapter = casbin_async_sqlalchemy_adapter.Adapter('sqlite+aiosqlite:///test.db')

# or mysql example 
# adapter = casbin_async_sqlalchemy_adapter.Adapter('mysql+aiomysql://user:pwd@127.0.0.1:3306/exampledb')

e = casbin.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

Note that AsyncAdaper must be used for AynscEnforcer.

External Session Support

The adapter supports using externally managed SQLAlchemy sessions. This feature is useful for:

  • Better transaction control in complex scenarios
  • Reducing database connections and communications
  • Supporting advanced database features like two-phase commits
  • Integrating with existing database session management

Basic Usage with External Session

import casbin_async_sqlalchemy_adapter
import casbin
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession
from sqlalchemy.orm import sessionmaker

# Create your own database session
engine = create_async_engine('sqlite+aiosqlite:///test.db')
async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)

# Create adapter with external session
session = async_session()
adapter = casbin_async_sqlalchemy_adapter.Adapter(
    'sqlite+aiosqlite:///test.db',
    db_session=session
)

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

# Now you have full control over the session
# The adapter will not auto-commit or auto-rollback when using external sessions

Transaction Control Example

# Example: Manual transaction control
async with async_session() as session:
    adapter = casbin_async_sqlalchemy_adapter.Adapter(
        'sqlite+aiosqlite:///test.db',
        db_session=session
    )
    
    e = casbin.AsyncEnforcer('path/to/model.conf', adapter)
    
    # Add multiple policies in a single transaction
    await e.add_policy("alice", "data1", "read")
    await e.add_policy("bob", "data2", "write")
    
    # Commit or rollback as needed
    await session.commit()

Batch Operations Example

# Example: Efficient batch operations
async with async_session() as session:
    adapter = casbin_async_sqlalchemy_adapter.Adapter(
        'sqlite+aiosqlite:///test.db',
        db_session=session
    )
    
    e = casbin.AsyncEnforcer('path/to/model.conf', adapter)
    
    # Batch add multiple policies efficiently
    policies = [
        ["alice", "data1", "read"],
        ["bob", "data2", "write"],
        ["carol", "data3", "read"]
    ]
    await e.add_policies(policies)
    
    # Commit the transaction
    await session.commit()

Getting Help

License

This project is licensed under the Apache 2.0 license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

casbin_async_sqlalchemy_adapter-1.9.0.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

casbin_async_sqlalchemy_adapter-1.9.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file casbin_async_sqlalchemy_adapter-1.9.0.tar.gz.

File metadata

File hashes

Hashes for casbin_async_sqlalchemy_adapter-1.9.0.tar.gz
Algorithm Hash digest
SHA256 66aed15141173587cbee62d9b0642464f9d2e81c27238d997d457fb20c26186a
MD5 44e17035fe031924da2eb824ae0ddf86
BLAKE2b-256 88b721ddafcc71f1b3e6f7a357b94583c8af4f060335552fee68f343f2186229

See more details on using hashes here.

File details

Details for the file casbin_async_sqlalchemy_adapter-1.9.0-py3-none-any.whl.

File metadata

File hashes

Hashes for casbin_async_sqlalchemy_adapter-1.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 beffeac1963be4e3848784d554926c0cec91b9f00babe62d053bb8744a9e8990
MD5 786dea43a4d8f7474d08a1d03273b84a
BLAKE2b-256 98e1b64273667f014f3d7529e2f35a5863b208d9d8dca3d21bd42c5a6aaaac57

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page