You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.6 KiB
Python

"""An Authorizer for use in the Jupyter server.
The default authorizer (AllowAllAuthorizer)
allows all authenticated requests
.. versionadded:: 2.0
"""
# Copyright (c) Jupyter Development Team.
# Distributed under the terms of the Modified BSD License.
from __future__ import annotations
from typing import TYPE_CHECKING
from traitlets import Instance
from traitlets.config import LoggingConfigurable
from .identity import IdentityProvider, User
if TYPE_CHECKING:
from collections.abc import Awaitable
from jupyter_server.base.handlers import JupyterHandler
class Authorizer(LoggingConfigurable):
"""Base class for authorizing access to resources
in the Jupyter Server.
All authorizers used in Jupyter Server
should inherit from this base class and, at the very minimum,
implement an ``is_authorized`` method with the
same signature as in this base class.
The ``is_authorized`` method is called by the ``@authorized`` decorator
in JupyterHandler. If it returns True, the incoming request
to the server is accepted; if it returns False, the server
returns a 403 (Forbidden) error code.
The authorization check will only be applied to requests
that have already been authenticated.
.. versionadded:: 2.0
"""
identity_provider = Instance(IdentityProvider)
def is_authorized(
self, handler: JupyterHandler, user: User, action: str, resource: str
) -> Awaitable[bool] | bool:
"""A method to determine if ``user`` is authorized to perform ``action``
(read, write, or execute) on the ``resource`` type.
Parameters
----------
user : jupyter_server.auth.User
An object representing the authenticated user,
as returned by :meth:`jupyter_server.auth.IdentityProvider.get_user`.
action : str
the category of action for the current request: read, write, or execute.
resource : str
the type of resource (i.e. contents, kernels, files, etc.) the user is requesting.
Returns
-------
bool
True if user authorized to make request; False, otherwise
"""
raise NotImplementedError
class AllowAllAuthorizer(Authorizer):
"""A no-op implementation of the Authorizer
This authorizer allows all authenticated requests.
.. versionadded:: 2.0
"""
def is_authorized(
self, handler: JupyterHandler, user: User, action: str, resource: str
) -> bool:
"""This method always returns True.
All authenticated users are allowed to do anything in the Jupyter Server.
"""
return True