Authentication

SQLAdmin 不强制对应用程序进行身份验证,但提供了一个可选的 AuthenticationBackend,您可以使用它。

AuthenticationBackend

SQLAdmin 提供基于会话的身份验证,允许您将任何现有的身份验证系统集成到其中。

AuthenticationBackend 类包含三个需要重写的方法:

  • authenticate:用于验证每个传入请求。

  • login:仅在登录页面调用,用于验证用户名/密码。

  • logout:仅在注销时调用,通常用于清除会话。

示例:

from sqladmin import Admin
from sqladmin.authentication import AuthenticationBackend
from starlette.requests import Request
from starlette.responses import RedirectResponse

class AdminAuth(AuthenticationBackend):
    async def login(self, request: Request) -> bool:
        form = await request.form()
        username, password = form["username"], form["password"]

        # 验证用户名/密码凭据
        # 并更新会话
        request.session.update({"token": "..."})

        return True

    async def logout(self, request: Request) -> bool:
        # 通常你只需要清除会话
        request.session.clear()
        return True

    async def authenticate(self, request: Request) -> bool:
        token = request.session.get("token")

        if not token:
            return False

        # 深入检查 token
        return True

authentication_backend = AdminAuth(secret_key="...")
admin = Admin(app=..., authentication_backend=authentication_backend, ...)

注意: 要使用 AuthenticationBackend,您需要安装 itsdangerous 包。


完整示例

使用 OAuth 您还可以将 OAuth 集成到 SQLAdmin 中,在此示例中,我们将使用 Authlib 集成 Google OAuth。如果您已经遵循了前面的示例,身份验证流程只需要做两个小改动:


权限

SQLAdmin 中的 ModelViewBaseView 类实现了两个特殊的方法,您可以重写它们。除了使用 AuthenticationBackend 外,您还可以使用这些方法来控制每个模型/视图的访问权限。因此,这更像是在检查用户是否有权限访问特定的模型或视图。

  • is_visible:控制该模型/视图是否应该显示在菜单中。

  • is_accessible:控制该模型/视图是否可以访问。

这两个方法都实现了相同的签名,应该返回一个布尔值。

注意: 要在侧边栏中显示模型/视图,is_visibleis_accessible 都应该返回 True

示例:

最后更新于