Skip to main content

SAPL Policy Enforcement Point (PEP) integration for Tornado

Project description

sapl-tornado

Policy-based authorization for Tornado. Write access control rules as external SAPL policy files and enforce them at runtime through decorators like @pre_enforce and @post_enforce. Policies can be updated without code changes or redeployment.

How It Works

Your application decorates handler methods with enforcement decorators. SAPL intercepts the call, sends an authorization subscription to the Policy Decision Point (PDP), and enforces the decision, including any obligations or advice the policy attaches.

class PatientHandler(tornado.web.RequestHandler):
    @pre_enforce(action="read", resource="patient")
    async def get(self, patient_id):
        return {"id": patient_id, "name": "Jane Doe", "ssn": "123-45-6789"}
policy "permit doctors to read patient data"
permit
  action == "read"
where
  "DOCTOR" in subject.roles;

If the PDP permits, the handler runs. If not, HTTP 403 is returned. If the decision carries obligations (like access logging or field redaction), they are enforced automatically through registered constraint handlers.

What You Get

SAPL goes beyond simple permit/deny. Decisions can carry obligations that must be fulfilled, advice that should be attempted, and resource transformations that modify return values before they reach the caller. The library handles all of this transparently.

For SSE endpoints, streaming decorators (@enforce_till_denied, @enforce_drop_while_denied, @enforce_recoverable_if_denied) maintain a live connection to the PDP, so access rights update in real time as policies, attributes, or the environment change. Built-in constraint handlers cover JSON field redaction and collection filtering. Writing custom handlers follows a simple registration pattern with register_constraint_handler.

Getting Started

pip install sapl-tornado
import tornado.ioloop
import tornado.web
from sapl_tornado.config import SaplConfig
from sapl_tornado.dependencies import configure_sapl, cleanup_sapl

configure_sapl(SaplConfig(base_url="https://localhost:8443"))

app = tornado.web.Application([...])
app.listen(8888)
tornado.ioloop.IOLoop.current().start()

For setup instructions, configuration options, the constraint handler reference, and the full API, see the Tornado documentation.

Links

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sapl_tornado-4.0.0.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sapl_tornado-4.0.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file sapl_tornado-4.0.0.tar.gz.

File metadata

  • Download URL: sapl_tornado-4.0.0.tar.gz
  • Upload date:
  • Size: 13.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sapl_tornado-4.0.0.tar.gz
Algorithm Hash digest
SHA256 3f2a318eef39a4e1998cfab5839c04a8ce86aaa01e11825153254d064bc360d5
MD5 cacf2f4e0a08b46baee7a4abd2bf5a4d
BLAKE2b-256 67437d5184520d91db3e1c488f1cf5ad6edd1fd21f9d61464c5c95991ff4c004

See more details on using hashes here.

File details

Details for the file sapl_tornado-4.0.0-py3-none-any.whl.

File metadata

  • Download URL: sapl_tornado-4.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sapl_tornado-4.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 362bdc44733015cd17539206c1949e7c259d9ad0d8549c624851241a20f1fe9b
MD5 401bb92a85bef69fcc70e3c79a344ea4
BLAKE2b-256 b8276a33667b6dc9ea10b1652418a2a2929fae02a4a4b73d5c8af2f8cdf20f34

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page