28 lines
789 B
Python
28 lines
789 B
Python
"""权限检查中间件"""
|
|
from fastapi import HTTPException, Depends
|
|
from app.core.security import verify_token
|
|
|
|
ROLE_PERMISSIONS = {
|
|
'admin': ['*'],
|
|
'area_admin': ['device.view', 'device.check'],
|
|
'school_admin': ['device.view'],
|
|
'user': ['device.view']
|
|
}
|
|
|
|
|
|
def check_permission(required_permission: str):
|
|
def permission_checker(token: str):
|
|
payload = verify_token(token)
|
|
if not payload:
|
|
raise HTTPException(status_code=401, detail="未授权")
|
|
|
|
role = payload.get('role', 'user')
|
|
permissions = ROLE_PERMISSIONS.get(role, [])
|
|
|
|
if '*' in permissions or required_permission in permissions:
|
|
return payload
|
|
|
|
raise HTTPException(status_code=403, detail="权限不足")
|
|
|
|
return permission_checker
|