casbin-async-sqlalchemy-adapter


Namecasbin-async-sqlalchemy-adapter JSON
Version 1.10.0 PyPI version JSON
download
home_pagehttps://github.com/officialpycasbin/async-sqlalchemy-adapter
SummaryAsynchronous SQLAlchemy Adapter for PyCasbin
upload_time2025-08-20 05:30:54
maintainerNone
docs_urlNone
authorCasbin
requires_python>=3.7
licenseApache 2.0
keywords asynccasbin sqlalchemy casbin-adapter rbac access control abac acl permission
VCS
bugtrack_url
requirements SQLAlchemy pycasbin
Travis-CI No Travis.
coveralls test coverage
            async-sqlalchemy-adapter
====

[![build](https://github.com/officialpycasbin/async-sqlalchemy-adapter/actions/workflows/build.yml/badge.svg)](https://github.com/officialpycasbin/async-sqlalchemy-adapter/actions/workflows/build.yml)
[![Coverage Status](https://coveralls.io/repos/github/officialpycasbin/async-sqlalchemy-adapter/badge.svg)](https://coveralls.io/github/officialpycasbin/async-sqlalchemy-adapter)
[![Version](https://img.shields.io/pypi/v/casbin_async_sqlalchemy_adapter.svg)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
[![PyPI - Wheel](https://img.shields.io/pypi/wheel/casbin_async_sqlalchemy_adapter.svg)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
[![Pyversions](https://img.shields.io/pypi/pyversions/casbin_async_sqlalchemy_adapter.svg)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
[![Download](https://static.pepy.tech/badge/casbin-async-sqlalchemy-adapter)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)
[![License](https://img.shields.io/pypi/l/casbin_async_sqlalchemy_adapter.svg)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)

Asynchronous SQLAlchemy Adapter is the [SQLAlchemy](https://www.sqlalchemy.org) adapter for [PyCasbin](https://github.com/casbin/pycasbin). With this library, Casbin can load policy from SQLAlchemy supported database or save policy to it.

Based on [Officially Supported Databases](http://www.sqlalchemy.org/), The current supported databases are:

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

## Installation

```
pip install casbin_async_sqlalchemy_adapter
```

## Simple Example

```python
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

```python
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

```python
# 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

```python
# 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

- [PyCasbin](https://github.com/casbin/pycasbin)

### License

This project is licensed under the [Apache 2.0 license](LICENSE).

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/officialpycasbin/async-sqlalchemy-adapter",
    "name": "casbin-async-sqlalchemy-adapter",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": null,
    "keywords": "asynccasbin, SQLAlchemy, casbin-adapter, rbac, access control, abac, acl, permission",
    "author": "Casbin",
    "author_email": "admin@casbin.org",
    "download_url": "https://files.pythonhosted.org/packages/bf/81/60f0cb5dc9603b9459ae99862928ca2eb48aa38ec442555f9ca0306c350b/casbin_async_sqlalchemy_adapter-1.10.0.tar.gz",
    "platform": null,
    "description": "async-sqlalchemy-adapter\n====\n\n[![build](https://github.com/officialpycasbin/async-sqlalchemy-adapter/actions/workflows/build.yml/badge.svg)](https://github.com/officialpycasbin/async-sqlalchemy-adapter/actions/workflows/build.yml)\n[![Coverage Status](https://coveralls.io/repos/github/officialpycasbin/async-sqlalchemy-adapter/badge.svg)](https://coveralls.io/github/officialpycasbin/async-sqlalchemy-adapter)\n[![Version](https://img.shields.io/pypi/v/casbin_async_sqlalchemy_adapter.svg)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n[![PyPI - Wheel](https://img.shields.io/pypi/wheel/casbin_async_sqlalchemy_adapter.svg)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n[![Pyversions](https://img.shields.io/pypi/pyversions/casbin_async_sqlalchemy_adapter.svg)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n[![Download](https://static.pepy.tech/badge/casbin-async-sqlalchemy-adapter)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n[![License](https://img.shields.io/pypi/l/casbin_async_sqlalchemy_adapter.svg)](https://pypi.org/project/casbin_async_sqlalchemy_adapter/)\n\nAsynchronous SQLAlchemy Adapter is the [SQLAlchemy](https://www.sqlalchemy.org) adapter for [PyCasbin](https://github.com/casbin/pycasbin). With this library, Casbin can load policy from SQLAlchemy supported database or save policy to it.\n\nBased on [Officially Supported Databases](http://www.sqlalchemy.org/), The current supported databases are:\n\n- PostgreSQL\n- MySQL\n- MariaDB\n- SQLite\n- Oracle\n- Microsoft SQL Server\n- Firebird\n\n## Installation\n\n```\npip install casbin_async_sqlalchemy_adapter\n```\n\n## Simple Example\n\n```python\nimport casbin_async_sqlalchemy_adapter\nimport casbin\n\nadapter = casbin_async_sqlalchemy_adapter.Adapter('sqlite+aiosqlite:///test.db')\n\n# or mysql example \n# adapter = casbin_async_sqlalchemy_adapter.Adapter('mysql+aiomysql://user:pwd@127.0.0.1:3306/exampledb')\n\ne = casbin.AsyncEnforcer('path/to/model.conf', adapter)\n\nsub = \"alice\"  # the user that wants to access a resource.\nobj = \"data1\"  # the resource that is going to be accessed.\nact = \"read\"  # the operation that the user performs on the resource.\n\nif e.enforce(sub, obj, act):\n    # permit alice to read data1\n    pass\nelse:\n    # deny the request, show an error\n    pass\n```\n\n> Note that AsyncAdaper must be used for AynscEnforcer.\n\n## External Session Support\n\nThe adapter supports using externally managed SQLAlchemy sessions. This feature is useful for:\n\n- Better transaction control in complex scenarios\n- Reducing database connections and communications\n- Supporting advanced database features like two-phase commits\n- Integrating with existing database session management\n\n### Basic Usage with External Session\n\n```python\nimport casbin_async_sqlalchemy_adapter\nimport casbin\nfrom sqlalchemy.ext.asyncio import create_async_engine, AsyncSession\nfrom sqlalchemy.orm import sessionmaker\n\n# Create your own database session\nengine = create_async_engine('sqlite+aiosqlite:///test.db')\nasync_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)\n\n# Create adapter with external session\nsession = async_session()\nadapter = casbin_async_sqlalchemy_adapter.Adapter(\n    'sqlite+aiosqlite:///test.db',\n    db_session=session\n)\n\ne = casbin.AsyncEnforcer('path/to/model.conf', adapter)\n\n# Now you have full control over the session\n# The adapter will not auto-commit or auto-rollback when using external sessions\n```\n\n### Transaction Control Example\n\n```python\n# Example: Manual transaction control\nasync with async_session() as session:\n    adapter = casbin_async_sqlalchemy_adapter.Adapter(\n        'sqlite+aiosqlite:///test.db',\n        db_session=session\n    )\n    \n    e = casbin.AsyncEnforcer('path/to/model.conf', adapter)\n    \n    # Add multiple policies in a single transaction\n    await e.add_policy(\"alice\", \"data1\", \"read\")\n    await e.add_policy(\"bob\", \"data2\", \"write\")\n    \n    # Commit or rollback as needed\n    await session.commit()\n```\n\n### Batch Operations Example\n\n```python\n# Example: Efficient batch operations\nasync with async_session() as session:\n    adapter = casbin_async_sqlalchemy_adapter.Adapter(\n        'sqlite+aiosqlite:///test.db',\n        db_session=session\n    )\n    \n    e = casbin.AsyncEnforcer('path/to/model.conf', adapter)\n    \n    # Batch add multiple policies efficiently\n    policies = [\n        [\"alice\", \"data1\", \"read\"],\n        [\"bob\", \"data2\", \"write\"],\n        [\"carol\", \"data3\", \"read\"]\n    ]\n    await e.add_policies(policies)\n    \n    # Commit the transaction\n    await session.commit()\n```\n\n\n### Getting Help\n\n- [PyCasbin](https://github.com/casbin/pycasbin)\n\n### License\n\nThis project is licensed under the [Apache 2.0 license](LICENSE).\n",
    "bugtrack_url": null,
    "license": "Apache 2.0",
    "summary": "Asynchronous SQLAlchemy Adapter for PyCasbin",
    "version": "1.10.0",
    "project_urls": {
        "Homepage": "https://github.com/officialpycasbin/async-sqlalchemy-adapter"
    },
    "split_keywords": [
        "asynccasbin",
        " sqlalchemy",
        " casbin-adapter",
        " rbac",
        " access control",
        " abac",
        " acl",
        " permission"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c2abb31e7649a09a6f2df0a33df26ba7e71668c3e6e3f081ca67b977669f6241",
                "md5": "8e4efb44718946198b1359b341f3fe4d",
                "sha256": "5f6cf981ffa09ce56233e1bc169aeaba26b5d120f6d2270dcf74de229d0f74fc"
            },
            "downloads": -1,
            "filename": "casbin_async_sqlalchemy_adapter-1.10.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "8e4efb44718946198b1359b341f3fe4d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 12815,
            "upload_time": "2025-08-20T05:30:53",
            "upload_time_iso_8601": "2025-08-20T05:30:53.449771Z",
            "url": "https://files.pythonhosted.org/packages/c2/ab/b31e7649a09a6f2df0a33df26ba7e71668c3e6e3f081ca67b977669f6241/casbin_async_sqlalchemy_adapter-1.10.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bf8160f0cb5dc9603b9459ae99862928ca2eb48aa38ec442555f9ca0306c350b",
                "md5": "0eff8e885b689956afd1b34b2ca5d627",
                "sha256": "fa292bd7930986f26e1b0b22eca0ffd066ae588e4ee5df65fa89affdc7febbb4"
            },
            "downloads": -1,
            "filename": "casbin_async_sqlalchemy_adapter-1.10.0.tar.gz",
            "has_sig": false,
            "md5_digest": "0eff8e885b689956afd1b34b2ca5d627",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 13312,
            "upload_time": "2025-08-20T05:30:54",
            "upload_time_iso_8601": "2025-08-20T05:30:54.249016Z",
            "url": "https://files.pythonhosted.org/packages/bf/81/60f0cb5dc9603b9459ae99862928ca2eb48aa38ec442555f9ca0306c350b/casbin_async_sqlalchemy_adapter-1.10.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-20 05:30:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "officialpycasbin",
    "github_project": "async-sqlalchemy-adapter",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "requirements": [
        {
            "name": "SQLAlchemy",
            "specs": [
                [
                    ">=",
                    "1.4.0"
                ]
            ]
        },
        {
            "name": "pycasbin",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        }
    ],
    "lcname": "casbin-async-sqlalchemy-adapter"
}
        
Elapsed time: 1.63353s