Skip to content

Commit 4954117

Browse files
authored
update the casbin to asynchronous (#69)
1 parent 7e16414 commit 4954117

File tree

3 files changed

+11
-13
lines changed

3 files changed

+11
-13
lines changed

backend/app/api/v1/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ async def get_sys_config():
4242
'aps_max_instances': settings.APS_MAX_INSTANCES,
4343
'aps_misfire_grace_time': settings.APS_MISFIRE_GRACE_TIME,
4444
'token_algorithm': settings.TOKEN_ALGORITHM,
45-
'token_expire_minutes': settings.TOKEN_EXPIRE_MINUTES,
46-
'token_url': settings.TOKEN_URL_SWAGGER,
45+
'token_expire_seconds': settings.TOKEN_EXPIRE_SECONDS,
46+
'token_swagger_url': settings.TOKEN_URL_SWAGGER,
4747
'log_file_name': settings.LOG_FILE_NAME,
4848
'middleware_cors': settings.MIDDLEWARE_CORS,
4949
'middleware_gzip': settings.MIDDLEWARE_GZIP,

backend/app/common/casbin_rbac.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,27 @@
11
#!/usr/bin/env python3
22
# -*- coding: utf-8 -*-
33
import casbin
4-
import casbin_sqlalchemy_adapter
5-
4+
import casbin_async_sqlalchemy_adapter
65
from fastapi import Request, Depends
76

87
from backend.app.common.exception.errors import AuthorizationError
98
from backend.app.common.jwt import CurrentUser
109
from backend.app.core.conf import settings
1110
from backend.app.core.path_conf import RBAC_MODEL_CONF
11+
from backend.app.database.db_mysql import async_engine
1212
from backend.app.models.sys_casbin_rule import CasbinRule
1313

1414

1515
class RBAC:
16-
def __init__(self):
17-
self._CASBIN_DATABASE_URL = f'mysql+pymysql://{settings.DB_USER}:{settings.DB_PASSWORD}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_DATABASE}?charset={settings.DB_CHARSET}'
1816

19-
def get_casbin_enforcer(self) -> casbin.Enforcer:
17+
@staticmethod
18+
async def get_casbin_enforcer() -> casbin.Enforcer:
2019
"""
21-
由于 casbin_sqlalchemy_adapter 内部使用的 SQLAlchemy 同步, 这里只能使用: mysql+pymysql
20+
获取 casbin 执行器
2221
2322
:return:
2423
"""
25-
# TODO: https://github.com/pycasbin/async-sqlalchemy-adapter/issues/4
26-
adapter = casbin_sqlalchemy_adapter.Adapter(self._CASBIN_DATABASE_URL, db_class=CasbinRule)
24+
adapter = casbin_async_sqlalchemy_adapter.Adapter(async_engine, db_class=CasbinRule)
2725

2826
enforcer = casbin.Enforcer(RBAC_MODEL_CONF, adapter)
2927

@@ -55,7 +53,7 @@ async def rbac_verify(self, request: Request, user: CurrentUser) -> None:
5553
return
5654

5755
# TODO: 通过 redis 做鉴权查询优化,减少数据库查询
58-
enforcer = self.get_casbin_enforcer()
56+
enforcer = await self.get_casbin_enforcer()
5957
if not enforcer.enforce(user_uuid, path, method):
6058
raise AuthorizationError
6159

requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ alembic==1.7.4
55
APScheduler==3.8.1
66
asyncmy==0.2.5
77
bcrypt==3.2.2
8-
casbin==1.18.2
9-
casbin_sqlalchemy_adapter==0.5.1
8+
asynccasbin==1.1.8
9+
casbin_async_sqlalchemy_adapter==1.1.0
1010
cryptography==39.0.1
1111
email-validator==1.1.3
1212
Faker==9.7.1

0 commit comments

Comments
 (0)