diff --git a/backend/app/api/v1/config.py b/backend/app/api/v1/config.py index f535cb68..868432b4 100644 --- a/backend/app/api/v1/config.py +++ b/backend/app/api/v1/config.py @@ -42,8 +42,8 @@ async def get_sys_config(): 'aps_max_instances': settings.APS_MAX_INSTANCES, 'aps_misfire_grace_time': settings.APS_MISFIRE_GRACE_TIME, 'token_algorithm': settings.TOKEN_ALGORITHM, - 'token_expire_minutes': settings.TOKEN_EXPIRE_MINUTES, - 'token_url': settings.TOKEN_URL_SWAGGER, + 'token_expire_seconds': settings.TOKEN_EXPIRE_SECONDS, + 'token_swagger_url': settings.TOKEN_URL_SWAGGER, 'log_file_name': settings.LOG_FILE_NAME, 'middleware_cors': settings.MIDDLEWARE_CORS, 'middleware_gzip': settings.MIDDLEWARE_GZIP, diff --git a/backend/app/common/casbin_rbac.py b/backend/app/common/casbin_rbac.py index d9390750..ef0bbb42 100644 --- a/backend/app/common/casbin_rbac.py +++ b/backend/app/common/casbin_rbac.py @@ -1,29 +1,27 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- import casbin -import casbin_sqlalchemy_adapter - +import casbin_async_sqlalchemy_adapter from fastapi import Request, Depends from backend.app.common.exception.errors import AuthorizationError from backend.app.common.jwt import CurrentUser from backend.app.core.conf import settings from backend.app.core.path_conf import RBAC_MODEL_CONF +from backend.app.database.db_mysql import async_engine from backend.app.models.sys_casbin_rule import CasbinRule class RBAC: - def __init__(self): - 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}' - def get_casbin_enforcer(self) -> casbin.Enforcer: + @staticmethod + async def get_casbin_enforcer() -> casbin.Enforcer: """ - 由于 casbin_sqlalchemy_adapter 内部使用的 SQLAlchemy 同步, 这里只能使用: mysql+pymysql + 获取 casbin 执行器 :return: """ - # TODO: https://github.com/pycasbin/async-sqlalchemy-adapter/issues/4 - adapter = casbin_sqlalchemy_adapter.Adapter(self._CASBIN_DATABASE_URL, db_class=CasbinRule) + adapter = casbin_async_sqlalchemy_adapter.Adapter(async_engine, db_class=CasbinRule) enforcer = casbin.Enforcer(RBAC_MODEL_CONF, adapter) @@ -55,7 +53,7 @@ class RBAC: return # TODO: 通过 redis 做鉴权查询优化,减少数据库查询 - enforcer = self.get_casbin_enforcer() + enforcer = await self.get_casbin_enforcer() if not enforcer.enforce(user_uuid, path, method): raise AuthorizationError diff --git a/requirements.txt b/requirements.txt index 4cc0375e..47544a9d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,8 +5,8 @@ alembic==1.7.4 APScheduler==3.8.1 asyncmy==0.2.5 bcrypt==3.2.2 -casbin==1.18.2 -casbin_sqlalchemy_adapter==0.5.1 +asynccasbin==1.1.8 +casbin_async_sqlalchemy_adapter==1.1.0 cryptography==39.0.1 email-validator==1.1.3 Faker==9.7.1