Skip to content

Commit 7659b63

Browse files
authored
Add data permission condition for filter data (#648)
1 parent 33ebc57 commit 7659b63

File tree

3 files changed

+11
-2
lines changed

3 files changed

+11
-2
lines changed

backend/app/admin/model/role.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
from typing import TYPE_CHECKING
66

7-
from sqlalchemy import String
7+
from sqlalchemy import Boolean, String
88
from sqlalchemy.dialects.mysql import LONGTEXT
9-
from sqlalchemy.dialects.postgresql import TEXT
9+
from sqlalchemy.dialects.postgresql import INTEGER, TEXT
1010
from sqlalchemy.orm import Mapped, mapped_column, relationship
1111

1212
from backend.app.admin.model.m2m import sys_role_data_scope, sys_role_menu, sys_user_role
@@ -24,6 +24,9 @@ class Role(Base):
2424
id: Mapped[id_key] = mapped_column(init=False)
2525
name: Mapped[str] = mapped_column(String(20), unique=True, comment='角色名称')
2626
status: Mapped[int] = mapped_column(default=1, comment='角色状态(0停用 1正常)')
27+
is_filter_scopes: Mapped[bool] = mapped_column(
28+
Boolean().with_variant(INTEGER, 'postgresql'), default=False, comment='过滤数据权限(0否 1是)'
29+
)
2730
remark: Mapped[str | None] = mapped_column(
2831
LONGTEXT().with_variant(TEXT, 'postgresql'), default=None, comment='备注'
2932
)

backend/app/admin/schema/role.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class RoleSchemaBase(SchemaBase):
1515

1616
name: str = Field(description='角色名称')
1717
status: StatusType = Field(StatusType.enable, description='状态')
18+
is_filter_scopes: bool = Field(False, description='过滤数据权限')
1819
remark: str | None = Field(None, description='备注')
1920

2021

backend/common/security/permission.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ async def filter_data_permission(db: AsyncSession, request: Request) -> ColumnEl
5656
:param request: FastAPI 请求对象
5757
:return:
5858
"""
59+
# 是否过滤数据权限
60+
for role in request.user.roles:
61+
if role.is_filter_scopes:
62+
return or_(1 == 1)
63+
5964
# 获取数据范围
6065
unique_data_scopes = {}
6166
for role in request.user.roles:

0 commit comments

Comments
 (0)