在做项目的权限控制时,为了实现自动化扩展权限控制,我们习惯将控制器方法作为一个权限标识,然后根据帐户的权限中是否存在这么一项路由以作为其是否能管理这项操作。这是一个简单且易维护的功能实现方法,之前见过一套教学系统,可能功能也比较庞大,其在做权限的时候用的一套复杂的配置文件,非常烦人。本文地址:http://www.04007.cn/article/992.html,未经许可,不得转载.
使用上面的方法的关键是要分离后台程序中的所有路由器方法,并过滤一些非权限项的路由,比如退出方法,然后添加进数据库表,再将角色和权限进行一对多联系起来。之后只需要将用户和角色进行关联,即能实现自由授予权限。本文地址:http://www.04007.cn/article/992.html,未经许可,不得转载.
使用Fastapi框架开发的管理后台,也可以轻松实现上面的权限控制,使用如下方法可以实现提取所有的路由方法。在处理所有的路由的文件里我们需要实例化APIRouter,并将各个路由中的方法通过include_router加入APIRouter的实例中。如下:
routerObj = APIRouter()
routerObj.include_router(模块,tag标签,prefix前缀等)本文地址:http://www.04007.cn/article/992.html,未经许可,不得转载.
因此我们可以使用这个routerObj来提取所有的方法。如下:本文地址:http://www.04007.cn/article/992.html,未经许可,不得转载.
#引入routerObj import routerObj @router.get("/get_all_fun", summary="get_all_function") async def get_all_fun(): data = routerObj.routes for r in data: ritem = r.__dict__ print(ritem['path']) print(ritem['tags']) print(ritem['summary'])本文地址:http://www.04007.cn/article/992.html,未经许可,不得转载.
上面的方法中提取routerObj对象的routes对象,其包括了整个项目的路由信息,object.__dict__将其转换为字典,然后就可以把fastapi模块中定义的@router.get/post等方法全部提取打印出来,并得到summary,这样就可以拿到权限应该有的权限名称以权限路由,记录数据库,然后在管理后台的用户验证逻辑程序中判断用户是否有这个权限(即用户请求的路由是否在给其分配的角色权限列表中)。本文地址:http://www.04007.cn/article/992.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/992.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |