Skip to content

Commit d24b73c

Browse files
author
zaza
committed
add owner_loader
1 parent be3596f commit d24b73c

1 file changed

Lines changed: 20 additions & 0 deletions

File tree

flask_authz/casbin_enforcer.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ def __init__(self, app, adapter, watcher=None):
2727
self.e = casbin.Enforcer(app.config.get("CASBIN_MODEL"), self.adapter, True)
2828
if watcher:
2929
self.e.set_watcher(watcher)
30+
self._owner_loader = None
3031

3132
def set_watcher(self, watcher):
3233
"""
@@ -38,6 +39,17 @@ def set_watcher(self, watcher):
3839
"""
3940
self.e.set_watcher(watcher)
4041

42+
def owner_loader(self, callback):
43+
"""
44+
This sets the callback for get owner. The
45+
function return a owner object, or ``None``
46+
47+
:param callback: The callback for retrieving a owner object.
48+
:type callback: callable
49+
"""
50+
self._owner_loader = callback
51+
return callback
52+
4153
def enforcer(self, func):
4254
@wraps(func)
4355
def wrapper(*args, **kwargs):
@@ -50,6 +62,14 @@ def wrapper(*args, **kwargs):
5062
)
5163
# Set resource URI from request
5264
uri = str(request.path)
65+
# Get owner from owner_loader
66+
if self._owner_loader:
67+
self.app.logger.info("Get owner from owner_loader")
68+
for owner in self._owner_loader():
69+
if self.e.enforce(
70+
owner.strip('"'), uri, request.method
71+
):
72+
return func(*args, **kwargs)
5373
for header in self.app.config.get("CASBIN_OWNER_HEADERS"):
5474
if header in request.headers:
5575
# Make Authorization Header Parser standard

0 commit comments

Comments
 (0)