Invenio-Records-Permissions

2.0.1 · active · verified Wed Apr 15

Invenio-Records-Permissions is a Python library that provides a flexible access control system for Invenio records, allowing developers to define and enforce permission policies for various record-related actions. It is a core module within the InvenioRDM ecosystem. The library is actively maintained, with recent updates in early 2026, often released in conjunction with other Invenio modules and InvenioRDM releases.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to define a custom permission factory using `invenio-access`'s `Permission` and `flask-principal`'s `UserNeed`, and how to structure a basic permission policy. The `invenio-records-permissions` library primarily provides `Generators` and `PermissionPolicy` classes to organize and apply these permission checks within an Invenio application.

from invenio_access import Permission
from flask_principal import UserNeed
from invenio_records_permissions.generators import AnyUser

# Example of a simple permission factory
def owner_permission_factory(record=None):
    """Grants permission if the current user is the record owner."""
    if record and "owner" in record:
        # In a real application, 'record["owner"]' would be the user ID
        # and UserNeed would compare against the authenticated user's ID.
        return Permission(UserNeed(record["owner"]))
    return Permission()

# Example of a basic permission policy
class MyRecordPermissionPolicy:
    can_read = [AnyUser()]
    can_create = [AnyUser()] # For simplicity, usually restricted
    can_update = [owner_permission_factory]
    can_delete = [owner_permission_factory]

# How you might use a generator directly (e.g., in a Policy's can_read list)
# This is typically integrated into an Invenio application context.
print(f"Can any user read? {AnyUser().needs(record=None)}")

view raw JSON →