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 中的 ModelView 和 BaseView 类实现了两个特殊的方法,您可以重写它们。除了使用 AuthenticationBackend 外,您还可以使用这些方法来控制每个模型/视图的访问权限。因此,这更像是在检查用户是否有权限访问特定的模型或视图。
is_visible:控制该模型/视图是否应该显示在菜单中。is_accessible:控制该模型/视图是否可以访问。
这两个方法都实现了相同的签名,应该返回一个布尔值。
注意: 要在侧边栏中显示模型/视图,is_visible 和 is_accessible 都应该返回 True。
示例:
最后更新于