@@ -58,32 +58,29 @@ from sqlmodel import SQLModel
5858app = FastAPI()
5959
6060# 创建AdminSite实例
61- site = AuthAdminSite(settings = Settings(database_url_async = ' sqlite+aiosqlite:///amisadmin.db' ))
61+ site = AuthAdminSite(settings = Settings(database_url_async = ' sqlite+aiosqlite:///amisadmin.db' ))
6262auth = site.auth
6363# 挂载后台管理系统
6464site.mount_app(app)
6565
66-
6766# 创建初始化数据库表
6867@app.on_event (" startup" )
6968async def startup ():
70- await site.db.async_run_sync(SQLModel.metadata.create_all, is_session = False )
69+ await site.db.async_run_sync(SQLModel.metadata.create_all, is_session = False )
7170 # 创建默认测试用户, 请及时修改密码!!!
7271 await auth.create_role_user(' admin' )
7372 await auth.create_role_user(' vip' )
7473
75-
7674# 要求: 用户必须登录
7775@app.get (" /auth/get_user" )
7876@auth.requires ()
7977def get_user (request : Request):
8078 return request.user
8179
82-
8380if __name__ == ' __main__' :
8481 import uvicorn
8582
86- uvicorn.run(app, debug = True )
83+ uvicorn.run(app, debug = True )
8784
8885```
8986
@@ -100,46 +97,40 @@ if __name__ == '__main__':
10097def user (request : Request):
10198 return request.user # 当前请求用户对象.
10299
103-
104100# 验证路由: 用户拥有admin角色
105101@app.get (" /auth/admin_roles" )
106102@auth.requires (' admin' )
107103def admin_roles (request : Request):
108104 return request.user
109105
110-
111106# 要求: 用户拥有vip角色
112107# 支持同步/异步路由
113108@app.get (" /auth/vip_roles" )
114109@auth.requires ([' vip' ])
115110async def vip_roles (request : Request):
116111 return request.user
117112
118-
119113# 要求: 用户拥有admin角色 或 vip角色
120114@app.get (" /auth/admin_or_vip_roles" )
121- @auth.requires (roles = [' admin' , ' vip' ])
115+ @auth.requires (roles = [' admin' , ' vip' ])
122116def admin_or_vip_roles (request : Request):
123117 return request.user
124118
125-
126119# 要求: 用户属于admin用户组
127120@app.get (" /auth/admin_groups" )
128- @auth.requires (groups = [' admin' ])
121+ @auth.requires (groups = [' admin' ])
129122def admin_groups (request : Request):
130123 return request.user
131124
132-
133125# 要求: 用户拥有admin角色 且 属于admin用户组
134126@app.get (" /auth/admin_roles_and_admin_groups" )
135- @auth.requires (roles = [' admin' ], groups = [' admin' ])
127+ @auth.requires (roles = [' admin' ], groups = [' admin' ])
136128def admin_roles_and_admin_groups (request : Request):
137129 return request.user
138130
139-
140131# 要求: 用户拥有vip角色 且 拥有`article:update`权限
141132@app.get (" /auth/vip_roles_and_article_update" )
142- @auth.requires (roles = [' vip' ], permissions = [' article:update' ])
133+ @auth.requires (roles = [' vip' ], permissions = [' article:update' ])
143134def vip_roles_and_article_update (request : Request):
144135 return request.user
145136
@@ -155,23 +146,19 @@ from typing import Tuple
155146from fastapi_user_auth.auth import Auth
156147from fastapi_user_auth.auth.models import User
157148
158-
159149# 路由参数依赖项, 推荐使用此方式
160- @app.get (" /auth/admin_roles_depend_1" )
150+ @app.get (" /auth/admin_roles_depend_1" )
161151def admin_roles (user : User = Depends(auth.get_current_user)):
162- return user # or request.user
163-
152+ return user # or request.user
164153
165154# 路径操作装饰器依赖项
166- @app.get (" /auth/admin_roles_depend_2" , dependencies = [Depends(auth.requires(' admin' )())])
155+ @app.get (" /auth/admin_roles_depend_2" , dependencies = [Depends(auth.requires(' admin' )())])
167156def admin_roles (request : Request):
168157 return request.user
169158
170-
171159# 全局依赖项
172160# 在app应用下全部请求都要求拥有admin角色
173- app = FastAPI(dependencies = [Depends(auth.requires(' admin' )())])
174-
161+ app = FastAPI(dependencies = [Depends(auth.requires(' admin' )())])
175162
176163@app.get (" /auth/admin_roles_depend_3" )
177164def admin_roles (request : Request):
@@ -197,10 +184,9 @@ auth.backend.attach_middleware(app)
197184``` python
198185from fastapi_user_auth.auth.models import User
199186
200-
201187async def get_request_user (request : Request) -> Optional[User]:
202188 # user= await auth.get_current_user(request)
203- if await auth.requires(' admin' , response = False )(request):
189+ if await auth.requires(' admin' , response = False )(request):
204190 return request.user
205191 else :
206192 return None
@@ -219,14 +205,18 @@ from sqlalchemy.ext.asyncio import create_async_engine
219205from sqlalchemy_database import AsyncDatabase
220206
221207# 创建异步数据库引擎
222- engine = create_async_engine(url = ' sqlite+aiosqlite:///amisadmin.db' , future = True )
208+ engine = create_async_engine(url = ' sqlite+aiosqlite:///amisadmin.db' , future = True )
223209# 使用`JwtTokenStore`创建auth对象
224- auth = Auth(db = AsyncDatabase(engine),
225- token_store = JwtTokenStore(secret_key = ' 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7' ))
210+ auth = Auth(
211+ db = AsyncDatabase(engine),
212+ token_store = JwtTokenStore(secret_key = ' 09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7' )
213+ )
226214
227215# 将auth对象传入AdminSite
228- site = AuthAdminSite(settings = Settings(database_url_async = ' sqlite+aiosqlite:///amisadmin.db' ),
229- auth = auth)
216+ site = AuthAdminSite(
217+ settings = Settings(database_url_async = ' sqlite+aiosqlite:///amisadmin.db' ),
218+ auth = auth
219+ )
230220
231221```
232222
@@ -236,8 +226,10 @@ site = AuthAdminSite(settings=Settings(database_url_async='sqlite+aiosqlite:///a
236226# 使用`DbTokenStore`创建auth对象
237227from fastapi_user_auth.auth.backends.db import DbTokenStore
238228
239- auth = Auth(db = AsyncDatabase(engine),
240- token_store = DbTokenStore(db = AsyncDatabase(engine)))
229+ auth = Auth(
230+ db = AsyncDatabase(engine),
231+ token_store = DbTokenStore(db = AsyncDatabase(engine))
232+ )
241233```
242234
243235### RedisTokenStore
@@ -247,8 +239,10 @@ auth = Auth(db=AsyncDatabase(engine),
247239from fastapi_user_auth.auth.backends.redis import RedisTokenStore
248240from aioredis import Redis
249241
250- auth = Auth(db = AsyncDatabase(engine),
251- token_store = RedisTokenStore(redis = Redis.from_url(' redis://localhost?db=0' )))
242+ auth = Auth(
243+ db = AsyncDatabase(engine),
244+ token_store = RedisTokenStore(redis = Redis.from_url(' redis://localhost?db=0' ))
245+ )
252246```
253247
254248## RBAC模型
@@ -275,25 +269,23 @@ from datetime import date
275269from fastapi_amis_admin.models.fields import Field
276270from fastapi_user_auth.auth.models import BaseUser
277271
278-
279272# 自定义`User`模型,继承`BaseUser`
280- class MyUser (BaseUser , table = True ):
281- birthday: date = Field(None , title = " 出生日期" )
282- location: str = Field(None , title = " 位置" )
283-
273+ class MyUser (BaseUser , table = True ):
274+ birthday: date = Field(None , title = " 出生日期" )
275+ location: str = Field(None , title = " 位置" )
284276
285277# 使用自定义的`User`模型,创建auth对象
286- auth = Auth(db = AsyncDatabase(engine), user_model = MyUser)
278+ auth = Auth(db = AsyncDatabase(engine), user_model = MyUser)
287279```
288280
289281### 拓展` Role ` ,` Group ` ,` Permission ` 模型
290282
291283``` python
292284# 自定义`Group`模型,继承`BaseRBAC`;覆盖`Role`,`Permission`模型类似,区别在于表名.
293- class MyGroup (BaseRBAC , table = True ):
285+ class MyGroup (BaseRBAC , table = True ):
294286 __tablename__ = ' auth_group' # 数据库表名,必须是这个才能覆盖默认模型
295- icon: str = Field(None , title = ' 图标' )
296- is_active: bool = Field(default = True , title = " 是否激活" )
287+ icon: str = Field(None , title = ' 图标' )
288+ is_active: bool = Field(default = True , title = " 是否激活" )
297289
298290```
299291
@@ -307,24 +299,21 @@ class MyGroup(BaseRBAC, table=True):
307299# 自定义模型管理类,继承重写对应的默认管理类
308300class MyGroupAdmin (admin .ModelAdmin ):
309301 group_schema = None
310- page_schema = PageSchema(label = ' 用户组管理' , icon = ' fa fa-group' )
302+ page_schema = PageSchema(label = ' 用户组管理' , icon = ' fa fa-group' )
311303 model = MyGroup
312304 link_model_fields = [Group.roles]
313305 readonly_fields = [' key' ]
314306
315-
316307# 自定义用户认证应用,继承重写默认的用户认证应用
317308class MyUserAuthApp (UserAuthApp ):
318309 GroupAdmin = MyGroupAdmin
319310
320-
321311# 自定义用户管理站点,继承重写默认的用户管理站点
322312class MyAuthAdminSite (AuthAdminSite ):
323313 UserAuthApp = MyUserAuthApp
324314
325-
326315# 使用自定义的`AuthAdminSite`类,创建site对象
327- site = MyAuthAdminSite(settings, auth = auth)
316+ site = MyAuthAdminSite(settings, auth = auth)
328317```
329318
330319## 界面预览
@@ -350,6 +339,6 @@ site = MyAuthAdminSite(settings, auth=auth)
350339感谢以下开发者对 FastAPI-User-Auth 作出的贡献:
351340
352341<a href =" https://github.com/amisadmin/fastapi_user_auth/graphs/contributors " >
353- <img src =" https://contrib.rocks/image?repo=amisadmin/fastapi_user_auth " />
342+ <img src =" https://contrib.rocks/image?repo=amisadmin/fastapi_user_auth " alt = " " />
354343</a >
355344
0 commit comments