mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-06 07:56:52 +08:00
fix(auth): support nested feature permissions (#6310)
This commit is contained in:
@@ -2,6 +2,8 @@ from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from app.schemas.user import UserPermissions
|
||||
|
||||
|
||||
class MfaChallenge(BaseModel):
|
||||
"""密码认证通过后需要继续完成的二次验证信息。"""
|
||||
@@ -28,7 +30,7 @@ class Token(BaseModel):
|
||||
# 权限级别
|
||||
level: int = 1
|
||||
# 详细权限
|
||||
permissions: Optional[dict[str, bool]] = Field(default_factory=dict)
|
||||
permissions: Optional[UserPermissions] = Field(default_factory=dict)
|
||||
# 是否显示配置向导
|
||||
wizard: Optional[bool] = None
|
||||
|
||||
|
||||
+15
-3
@@ -1,10 +1,22 @@
|
||||
from typing import Optional
|
||||
|
||||
from pydantic import BaseModel, Field, ConfigDict
|
||||
from typing_extensions import TypedDict
|
||||
|
||||
from app.schemas.common import JsonData
|
||||
|
||||
|
||||
class UserPermissions(TypedDict, total=False):
|
||||
"""用户分类权限及可动态扩展的功能级权限。"""
|
||||
|
||||
discovery: bool # 发现功能分类权限
|
||||
search: bool # 资源搜索分类权限
|
||||
subscribe: bool # 订阅管理分类权限
|
||||
manage: bool # 系统管理分类权限
|
||||
admin: bool # 管理员入口标识,实际授权仍由超级用户身份决定
|
||||
features: dict[str, bool] # 功能键到启用状态的映射
|
||||
|
||||
|
||||
# Shared properties
|
||||
class UserBase(BaseModel):
|
||||
"""用户公共资料、权限和个性化设置。"""
|
||||
@@ -22,7 +34,7 @@ class UserBase(BaseModel):
|
||||
# 是否开启二次验证
|
||||
is_otp: Optional[bool] = False
|
||||
# 权限
|
||||
permissions: Optional[dict[str, bool]] = Field(default_factory=dict)
|
||||
permissions: Optional[UserPermissions] = Field(default_factory=dict)
|
||||
# 个性化设置
|
||||
settings: Optional[dict[str, JsonData]] = Field(default_factory=dict)
|
||||
|
||||
@@ -37,7 +49,7 @@ class UserCreate(UserBase):
|
||||
email: Optional[str] = None
|
||||
password: Optional[str] = None
|
||||
settings: Optional[dict[str, JsonData]] = Field(default_factory=dict)
|
||||
permissions: Optional[dict[str, bool]] = Field(default_factory=dict)
|
||||
permissions: Optional[UserPermissions] = Field(default_factory=dict)
|
||||
|
||||
|
||||
# Properties to receive via API on update
|
||||
@@ -49,7 +61,7 @@ class UserUpdate(UserBase):
|
||||
email: Optional[str] = None
|
||||
password: Optional[str] = None
|
||||
settings: Optional[dict[str, JsonData]] = Field(default_factory=dict)
|
||||
permissions: Optional[dict[str, bool]] = Field(default_factory=dict)
|
||||
permissions: Optional[UserPermissions] = Field(default_factory=dict)
|
||||
|
||||
|
||||
class UserInDBBase(UserBase):
|
||||
|
||||
Reference in New Issue
Block a user