Python中如何进行Web开发的权限管理
楼主目前使用的是 python falsk 做后端开发,使用了 RBAC 架构作为权限管理。
但是我有以下疑问:
1.在查找该用户是否具有权限的时候,采用的方式是:查找用户角色 -> 用户角色对应的权限表 -> 查找该用户是否具备此权限 这样设计合理吗?
2.如果我要限制用户可以查看多少页的数据(如分为 50 页,100 页),在权限表中是应该设置一个具体的数字,还是直接设定不可更改的一个权限标示就足够
3.对于像腾讯云这样的网站,所用的定制权限(如使用的机器内存大小,这个难道是购买之后就直接固定了吗?),如果我想通过购买来确定权限,应该如何做
能给个合理建议吗?谢谢
Python中如何进行Web开发的权限管理
基于资源的权限控制更加灵活.
在Python Web开发中,权限管理通常通过中间件、装饰器和权限系统来实现。核心思路是:在请求处理前验证用户是否有权访问特定资源。
以Flask为例,一个简单的基于角色的权限管理可以这样实现:
from flask import Flask, request, abort
from functools import wraps
app = Flask(__name__)
# 模拟用户数据库
users = {
'user1': {'role': 'admin'},
'user2': {'role': 'user'}
}
# 权限装饰器
def require_role(role):
def decorator(f):
@wraps(f)
def decorated_function(*args, **kwargs):
# 从请求头获取用户信息(实际中应该用token验证)
username = request.headers.get('X-Username')
if not username or users.get(username, {}).get('role') != role:
abort(403) # 禁止访问
return f(*args, **kwargs)
return decorated_function
return decorator
[@app](/user/app).route('/admin')
@require_role('admin')
def admin_page():
return '管理员页面'
[@app](/user/app).route('/user')
@require_role('user')
def user_page():
return '普通用户页面'
if __name__ == '__main__':
app.run(debug=True)
对于更复杂的系统,推荐使用现成的权限框架:
-
Django:内置强大的权限系统
# Django视图权限控制 from django.contrib.auth.decorators import permission_required [@permission_required](/user/permission_required)('app.can_view') def my_view(request): # 只有有权限的用户才能访问 pass -
Flask-Security:为Flask提供完整的权限管理
from flask_security import roles_required [@app](/user/app).route('/admin') [@roles_required](/user/roles_required)('admin') def admin(): return '管理员区域' -
FastAPI:使用依赖注入实现权限控制
from fastapi import Depends, HTTPException async def check_admin(token: str = Header(...)): if not validate_admin_token(token): raise HTTPException(status_code=403) return True [@app](/user/app).get("/admin") async def admin_area(admin: bool = Depends(check_admin)): return {"message": "欢迎管理员"}
关键实现要点:
- 用户认证(Authentication):验证用户身份
- 权限验证(Authorization):检查用户是否有权执行操作
- 角色(Roles)和权限(Permissions)分离设计
- 中间件统一处理权限验证
对于生产环境,建议结合JWT或OAuth2实现无状态认证,并将权限信息存储在数据库中以便动态管理。
总结:根据项目复杂度选择合适的权限方案。
谢谢,有教程或者开源项目作为参考吗?
基于资源的权限控制和基于角色的权限控制的主要区别在于:是否显式的表达出某个角色对于某个资源有某个操作的权限。优点体现在需求变更时的需要改动的代码更少
这是我的一点总结: https://www.myway5.com/index.php/2018/03/29/%E7%B3%BB%E7%BB%9F%E6%9D%83%E9%99%90%E8%AE%BE%E8%AE%A1%E4%B8%ADrbac%E6%A8%A1%E5%9E%8B%E7%9A%84%E4%BD%BF%E7%94%A8/
我觉得 rbac 挺好的。
rbac 在很多场景下就是个鸡肋,不能彻底解决较为复杂的权限问题,比如同一个资源,A 能 CURD,B 仅能 CU 的场景
我个人是觉得“应该明确的表示 1000 页和用户查看的页数进行大小比较”这种方案会比较好,因为在这个限定发生改变时,代码改动最小
将 50 页,100 页存为 2 条权限,然后在用户请求的时候检查一下就行了
用户和权限之间还可以再加一个用户组,默认用户组有默认权限这样
其实这也在我的疑问中。因为我是加了用户组的(如超级管理员等),但是根据一些不错的博客(如 ),最后还是通过 直接查找是否拥有这项权限 来确定是否返回数据。当然,我认为加了用户组之后管理权限要方便的多,直接赋予角色就行
auth 授权了解一下 RBAC 都是很老的产物了
如果我要一级管理员显示某个按钮 二级管理员不显示 RBAC 就做不到了


