FastAPI ABAC authorization realization
Project description
DAuth
Python FastAPI ABAC Realization.
Getting started
Requirements:
redis
- for cache supportdatabases
- for database support
Install:
pip install dauth
After installing import main functions by
from dauth import auth
Library represents function
def Policy(
subject_call: Callable,
resource_type: Any,
method: str,
check_callback: Callable,
database_callback: Union[Callable, None] = None,
cache_callback: Union[Callable, None] = None
)
subject_callback
- Is function that library put in FastAPIDepends
. Usually function returns user which tries to work withresource
resource_type
- Isstr
which on which User tries to get accessmethod
- Is API method by which working endpointcheck_callback
- Is function that realize Policy's check. Function take arguments:check_callback(subject, resource_type, item_id, method, db, cache)
-
subject
is result ofDepends(subject_callback)
-
resource_type
is argument ofPolicy()
-
item_id
(by default '*') is providing by FastAPI decorator@app.get(/test/{item_id})
-
method
is argument ofPolicy()
-
db
is database connection, result ofDepends(database_callback)
-
cache
is redis connection, result ofDepends(cache_callback)
database_callback
- Is a function for getting database connecioncache_callback
- Is a function for getting Redis connection
Examples
Simple usage
from fastapi import FastAPI, Depends
from dauth import auth
app = FastAPI()
def is_admin(subject, resource_type, item_id, method, db, cache):
if 'admin' not in subject.scopes:
raise auth.DENY
@app.get("/test")
# function get_user_auth returns User's object
def test(
user = Depends(auth.Policy(
get_user_auth,
'test',
'get',
is_admin
))
):
return {"message":"Good"}
@app.get("/test_with_db")
# function get_database returns Databases connection
def test_db(
user = Depends(auth.Policy(
get_user_auth,
'test',
'get',
is_admin,
database_callback=get_database
))
):
return {"message":"Good"}
@app.get("/test_with_cache")
# function get_cache returns Redis connection
def test_cache(
user = Depends(auth.Policy(
get_user_auth,
'test',
'get',
is_admin,
cache_callback=get_cache
))
):
return {"message":"Good"}
Developed by DenVilk
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
dauth-0.4.tar.gz
(2.4 kB
view hashes)