From 778d7b9af6705723784c917f82dd7db33f789c29 Mon Sep 17 00:00:00 2001 From: siuhui Date: Wed, 24 Apr 2024 19:47:40 +0800 Subject: [PATCH] docs: add usage instructions, example code to README --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/README.md b/README.md index 63c7a81..27d406d 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,60 @@ This is an Adapter for [PyCasbin](https://github.com/casbin/pycasbin) that imple pip install casbin_databases_adapter ``` +## Simple Example + +```python +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 - [PyCasbin](https://github.com/casbin/pycasbin)