Skip to content

Commit c9bbb10

Browse files
authored
Update data scope and rule to m2m (#657)
1 parent b415dc8 commit c9bbb10

File tree

4 files changed

+28
-10
lines changed

4 files changed

+28
-10
lines changed

backend/app/admin/crud/crud_data_rule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ async def get_list(self, name: str | None) -> Select:
3131
:param name: 规则名称
3232
:return:
3333
"""
34-
stmt = select(self.model).options(noload(self.model.scope)).order_by(desc(self.model.created_time))
34+
stmt = select(self.model).options(noload(self.model.scopes)).order_by(desc(self.model.created_time))
3535

3636
filters = []
3737
if name is not None:

backend/app/admin/model/data_rule.py

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

55
from typing import TYPE_CHECKING
66

7-
from sqlalchemy import ForeignKey, String
7+
from sqlalchemy import String
88
from sqlalchemy.orm import Mapped, mapped_column, relationship
99

10+
from backend.app.admin.model.m2m import sys_data_scope_rule
1011
from backend.common.model import Base, id_key
1112

1213
if TYPE_CHECKING:
@@ -28,8 +29,5 @@ class DataRule(Base):
2829
)
2930
value: Mapped[str] = mapped_column(String(255), comment='规则值')
3031

31-
# 数据范围规则一对多
32-
scope_id: Mapped[int | None] = mapped_column(
33-
ForeignKey('sys_data_scope.id', ondelete='SET NULL'), default=None, comment='数据范围关联 ID'
34-
)
35-
scope: Mapped[DataScope] = relationship(init=False, back_populates='rules')
32+
# 数据范围规则多对多
33+
scopes: Mapped[list[DataScope]] = relationship(init=False, secondary=sys_data_scope_rule, back_populates='rules')

backend/app/admin/model/data_scope.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from sqlalchemy import String
88
from sqlalchemy.orm import Mapped, mapped_column, relationship
99

10-
from backend.app.admin.model.m2m import sys_role_data_scope
10+
from backend.app.admin.model.m2m import sys_data_scope_rule, sys_role_data_scope
1111
from backend.common.model import Base, id_key
1212

1313
if TYPE_CHECKING:
@@ -23,8 +23,8 @@ class DataScope(Base):
2323
name: Mapped[str] = mapped_column(String(50), unique=True, comment='名称')
2424
status: Mapped[int] = mapped_column(default=1, comment='状态(0停用 1正常)')
2525

26-
# 数据范围规则一对多
27-
rules: Mapped[list[DataRule]] = relationship(init=False, back_populates='scope')
26+
# 数据范围规则多对多
27+
rules: Mapped[list[DataRule]] = relationship(init=False, secondary=sys_data_scope_rule, back_populates='scopes')
2828

2929
# 角色数据范围多对多
3030
roles: Mapped[list[Role]] = relationship(init=False, secondary=sys_role_data_scope, back_populates='scopes')

backend/app/admin/model/m2m.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,23 @@
3333
comment='数据范围 ID',
3434
),
3535
)
36+
37+
sys_data_scope_rule = Table(
38+
'sys_data_scope_rule',
39+
MappedBase.metadata,
40+
Column('id', INT, primary_key=True, unique=True, index=True, autoincrement=True, comment='主键ID'),
41+
Column(
42+
'data_scope_id',
43+
Integer,
44+
ForeignKey('sys_data_scope.id', ondelete='CASCADE'),
45+
primary_key=True,
46+
comment='数据范围 ID',
47+
),
48+
Column(
49+
'data_rule_id',
50+
Integer,
51+
ForeignKey('sys_data_rule.id', ondelete='CASCADE'),
52+
primary_key=True,
53+
comment='数据规则 ID',
54+
),
55+
)

0 commit comments

Comments
 (0)