Skip to content

Chimou0/casbin-databases-adapter

 
 

Repository files navigation

Databases Casbin Adapter

GitHub Actions Coverage Status Version PyPI - Wheel Pyversions Download License

This is an Adapter for PyCasbin that implemented using Databases connection to achieve async process

Installation

pip install casbin_databases_adapter

Simple Example

import casbin_databases_adapter
import casbin
from databases import Database
import sqlalchemy
from sqlalchemy import Table, Column, String, Integer
from sqlalchemy.sql.ddl import CreateTable
import asyncio

DATABASE_URL = "sqlite+aiosqlite:///example.db"

async def create_casbin_rule_table(db: Database):
    metadata = sqlalchemy.MetaData()
    table = Table(
        "casbin_rules",
        metadata,
        Column("id", Integer, primary_key=True),
        Column("ptype", String(255)),
        Column("v0", String(255)),
        Column("v1", String(255)),
        Column("v2", String(255)),
        Column("v3", String(255)),
        Column("v4", String(255)),
        Column("v5", String(255)),
    )
    q = CreateTable(table)
    await db.execute(query=str(q))
    return table

async def main():
    database = Database(DATABASE_URL)
    await database.connect()
    casbin_rule_table = await create_casbin_rule_table(database)
    adapter = casbin_databases_adapter.DatabasesAdapter(db=database, table=casbin_rule_table)
    
    e = casbin.Enforcer('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

# run the main function
asyncio.run(main())

Getting Help

License

This project is licensed under the Apache 2.0 license.

About

Async Databases Adapter for PyCasbin

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%