成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

FastAPI 角色權限管理(RBAC):入門級思路

開發
本篇文章將手把手教你如何在 FastAPI 中 實現角色權限系統,實現真正的多用戶訪問控制!
  • 你是否想讓管理員擁有更多權限?
  • 普通用戶只能訪問自己的內容?

RBAC(基于角色的訪問控制)是解決多角色權限管理的最佳實踐。本篇文章將手把手教你如何在 FastAPI 中 實現角色權限系統,實現真正的多用戶訪問控制!

什么是 RBAC?

RBAC(Role-Based Access Control)是一種 通過角色(Role)管理權限(Permission) 的模型:

  • 用戶(User) → 屬于一個或多個角色
  • 角色(Role) → 擁有若干權限
  • 權限(Permission) → 授權訪問接口、資源

好處:

  • 權限解耦:權限不直接綁定用戶,而是抽象為角色
  • 擴展性強:修改權限只需更新角色
  • 更安全、更規范

目錄結構示例

app/
├── api/
│   └── user.py
├── auth/
│   ├── auth.py          # 登錄認證
│   └── deps.py          # 權限控制邏輯
├── core/
│   └── security.py
├── models/
│   ├── user.py          # 用戶模型
│   └── role.py          # 角色模型
├── schemas/
│   ├── user.py
│   └── role.py

用戶與角色模型定義

models/role.py:

from tortoise.models import Model
from tortoise import fields

class Role(Model):
    id = fields.IntField(pk=True)
    name = fields.CharField(max_length=50, unique=True)

    users: fields.ReverseRelation["User"]

models/user.py:

from tortoise.models import Model
from tortoise import fields
from .role import Role

class User(Model):
    id = fields.IntField(pk=True)
    username = fields.CharField(max_length=50, unique=True)
    hashed_password = fields.CharField(max_length=128)
    role = fields.ForeignKeyField("models.Role", related_name="users")

用戶注冊默認賦予角色

api/user.py:

@router.post("/register", response_model=UserOut)
async def register(user: UserCreate):
    default_role = await Role.get_or_create(name="user")  # 默認角色
    hashed_pwd = hash_password(user.password)
    role_obj, created = await Role.get_or_create(name="user")
    new_user = await User.create(
        username=user.username,
        hashed_password=hashed_pwd,
        role=role_obj
    )
    return new_user

權限控制依賴(auth/deps.py)

我們新增一個 require_role 方法來檢查用戶的角色:

from fastapi import Depends, HTTPException
from app.auth.auth import oauth2_scheme
from jose import jwt, JWTError
from app.models.user import User
from app.core.security import SECRET_KEY, ALGORITHM

asyncdefget_current_user(token: str = Depends(oauth2_scheme)):
    try:
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
        username = payload.get("sub")
    except JWTError:
        raise HTTPException(status_code=401, detail="Token 認證失敗")
    
    user = await User.get_or_none(username=username).prefetch_related("role")
    ifnot user:
        raise HTTPException(status_code=404, detail="用戶不存在")
    return user

defrequire_role(required_roles: list[str]):
    asyncdefchecker(current_user: User = Depends(get_current_user)):
        if current_user.role.name notin required_roles:
            raise HTTPException(status_code=403, detail="權限不足")
        return current_user
    return checker

使用示例:不同接口設定權限

@router.get("/admin-only")
async def admin_route(current_user=Depends(require_role(["admin"]))):
    return {"msg": f"歡迎管理員 {current_user.username}"}

@router.get("/user")
async def user_route(current_user=Depends(require_role(["user", "admin"]))):
    return {"msg": f"歡迎用戶 {current_user.username}"}

擴展建議(可選)

  • 增加 Permission 表:實現更細粒度控制(如資源級權限)
  • 支持 多角色綁定:用戶擁有多個角色(ManyToMany)
  • 引入 菜單/接口授權系統:可視化配置權限
  • 添加 RBAC 管理后臺界面

總結

通過本文你實現了:

  • 用戶 ?? 角色 ?? 權限 的完整閉環
  • FastAPI 中的 權限依賴注入
  • 管理員/用戶等不同訪問控制場景
責任編輯:趙寧寧 來源: Ssoul肥魚
相關推薦

2010-06-23 10:55:10

FreeBSD入門級命

2010-09-13 13:58:17

HTML DOM

2010-09-08 12:45:16

2021-02-08 12:59:12

Git 控制系統

2011-03-25 09:09:29

算法數據庫

2011-03-25 09:29:03

算法數據庫

2011-03-25 11:01:33

算法數據庫

2011-08-11 22:09:46

激光打印機推薦

2013-05-06 09:14:26

BigQuery大數據分析大數據分析入門

2017-07-21 17:19:45

戴爾

2011-05-10 14:53:27

專業顯卡評測

2015-07-13 11:20:01

iPhone內存蘋果

2016-03-28 09:54:27

ios開發入門

2017-04-07 10:49:54

NVIDIA入門GTX 1030

2017-05-10 09:26:41

機器學習深度學習

2009-10-27 18:01:46

2013-08-20 09:42:24

IDC入門級存儲存儲市場

2016-05-16 11:00:49

IBM大型機LinuxONE

2023-04-14 15:02:55

機器學習算法

2015-11-13 10:06:27

數據科學大數據入門
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人国产在线视频 | 四虎永久在线精品免费一区二 | 日韩精品在线播放 | 亚洲情综合五月天 | 亚洲高清在线 | 91看片官网 | 亚洲va国产日韩欧美精品色婷婷 | 理论片免费在线观看 | 日韩精品1区2区 | 嫩呦国产一区二区三区av | 中文字幕在线观看日韩 | 日本综合在线观看 | 二区成人 | 国产三级在线观看播放 | 日韩精品久久久久久 | 天天拍天天操 | 能看的av| 亚洲欧美一区二区三区国产精品 | av资源中文在线天堂 | 亚洲欧洲激情 | 天堂av中文在线 | 狠狠草视频| 中文字幕在线观看www | 亚洲精品v | 国产精品免费观看 | 国产一区二区三区四区五区加勒比 | 欧美国产视频 | 欧美成人影院在线 | 欧美成人一区二区三区片免费 | 成人欧美日韩一区二区三区 | 最新国产精品精品视频 | 色综合久久伊人 | 精品国产乱码久久久久久蜜臀 | 国产精品成人一区二区三区吃奶 | 91精品久久久久久久久久小网站 | 搞黄网站在线观看 | 国产午夜三级一区二区三 | 美女视频一区 | 国产成人精品一区二区三区在线观看 | 日韩一级电影免费观看 | 美女视频一区 |