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

FastAPI 角色權(quán)限管理(RBAC):入門級(jí)思路

開(kāi)發(fā)
本篇文章將手把手教你如何在 FastAPI 中 實(shí)現(xiàn)角色權(quán)限系統(tǒng),實(shí)現(xiàn)真正的多用戶訪問(wèn)控制!
  • 你是否想讓管理員擁有更多權(quán)限?
  • 普通用戶只能訪問(wèn)自己的內(nèi)容?

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

什么是 RBAC?

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

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

好處:

  • 權(quán)限解耦:權(quán)限不直接綁定用戶,而是抽象為角色
  • 擴(kuò)展性強(qiáng):修改權(quán)限只需更新角色
  • 更安全、更規(guī)范

目錄結(jié)構(gòu)示例

app/
├── api/
│   └── user.py
├── auth/
│   ├── auth.py          # 登錄認(rèn)證
│   └── deps.py          # 權(quán)限控制邏輯
├── 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")

用戶注冊(cè)默認(rèn)賦予角色

api/user.py:

@router.post("/register", response_model=UserOut)
async def register(user: UserCreate):
    default_role = await Role.get_or_create(name="user")  # 默認(rèn)角色
    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

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

我們新增一個(gè) require_role 方法來(lái)檢查用戶的角色:

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 認(rèn)證失敗")
    
    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="權(quán)限不足")
        return current_user
    return checker

使用示例:不同接口設(shè)定權(quán)限

@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}"}

擴(kuò)展建議(可選)

  • 增加 Permission 表:實(shí)現(xiàn)更細(xì)粒度控制(如資源級(jí)權(quán)限)
  • 支持 多角色綁定:用戶擁有多個(gè)角色(ManyToMany)
  • 引入 菜單/接口授權(quán)系統(tǒng):可視化配置權(quán)限
  • 添加 RBAC 管理后臺(tái)界面

總結(jié)

通過(guò)本文你實(shí)現(xiàn)了:

  • 用戶 ?? 角色 ?? 權(quán)限 的完整閉環(huán)
  • FastAPI 中的 權(quán)限依賴注入
  • 管理員/用戶等不同訪問(wèn)控制場(chǎng)景
責(zé)任編輯:趙寧寧 來(lái)源: Ssoul肥魚
相關(guān)推薦

2021-02-08 12:59:12

Git 控制系統(tǒng)

2010-09-08 12:45:16

2010-06-23 10:55:10

FreeBSD入門級(jí)命

2010-09-13 13:58:17

HTML DOM

2013-05-06 09:14:26

BigQuery大數(shù)據(jù)分析大數(shù)據(jù)分析入門

2011-03-25 09:09:29

算法數(shù)據(jù)庫(kù)

2011-03-25 09:29:03

算法數(shù)據(jù)庫(kù)

2011-03-25 11:01:33

算法數(shù)據(jù)庫(kù)

2011-08-11 22:09:46

激光打印機(jī)推薦

2015-07-13 11:20:01

iPhone內(nèi)存蘋果

2016-03-28 09:54:27

ios開(kāi)發(fā)入門

2017-04-07 10:49:54

NVIDIA入門GTX 1030

2017-05-10 09:26:41

機(jī)器學(xué)習(xí)深度學(xué)習(xí)

2017-07-21 17:19:45

戴爾

2011-05-10 14:53:27

專業(yè)顯卡評(píng)測(cè)

2023-04-14 15:02:55

機(jī)器學(xué)習(xí)算法

2009-11-02 09:14:51

ASP.NET MVC

2015-11-13 10:06:27

數(shù)據(jù)科學(xué)大數(shù)據(jù)入門

2013-08-20 09:42:24

IDC入門級(jí)存儲(chǔ)存儲(chǔ)市場(chǎng)

2016-05-16 11:00:49

IBM大型機(jī)LinuxONE
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久久久国产精品 | 中文字幕一区在线观看视频 | 国内精品久久久久久影视8 最新黄色在线观看 | 久久久久久久久久毛片 | av资源网站| 婷婷在线网站 | 手机在线不卡av | 精品综合久久 | 综合久| 久久精品亚洲 | 9999在线视频 | 精品综合久久久 | 精品国产乱码久久久久久丨区2区 | 久久亚洲国产 | 久久91av | 欧美日韩a | 精品视频在线播放 | 国产精品久久久久久亚洲调教 | www.黄网 | 中国大陆高清aⅴ毛片 | 精品国产成人 | www.青娱乐| 欧美三级电影在线播放 | 在线视频亚洲 | 波波电影院一区二区三区 | 精品欧美一区二区三区久久久小说 | 黄色片亚洲 | 欧美成人a∨高清免费观看 91伊人 | 男人的天堂一级片 | 欧美一级特黄aaa大片在线观看 | 亚洲精品欧美 | 在线欧美日韩 | 国产精品久久久久久一区二区三区 | 亚洲国产成人精品女人久久久 | 国产在线精品免费 | 亚洲激精日韩激精欧美精品 | 黄视频网站免费观看 | 欧美成人第一页 | 伊人久久在线观看 | 日本高清中文字幕 | 日韩中文字幕免费在线 |